Nasıl saymak ve MySQL tek bir sorguda kayıt sınırlamak için?

3 Cevap php

Aşağıdaki gibi bir tablo kayıtları için arıyorum:

SELECT Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;

Şimdi, benim belleği korumak için SINIRI ekleme. Ama ne zaman kelime 'prashant' için kullanıcı arar o zaman ben var toplam kayıtları 'prashant' için 124 olduğunu. Sorguya uygulanır sınırı sadece benim PHP komut 10 kayıtları getirir yüzden ve ben PHP kodu mysql değişkeni saymak olduğumda buldum toplam kayıtları döndürür Ama 10 olduğunu.

Böylece temelde saymak ve yukarıdaki sorguda bazı değişiklikler yaparak, tek bir sorgu kullanarak sınırlamak istiyorum, ben kayıtların toplam sayısını (124) istiyorum. Ben sadece sorgu tarafından bulunan toplam sonucunu sayım için ayrı bir sayısı (*) sorgusu çalıştırmak istemiyorum.

Teşekkürler.

3 Cevap

SELECT SQL_CALC_FOUND_ROWS
  Id, Name
FROM my_table
WHERE
  Name LIKE '%prashant%'
LIMIT 0, 10;

# Find total rows
SELECT FOUND_ROWS();

more info

Ionut belirtildiği gibi MySQL, SQL_CALC_FOUND_ROWS kullanarak bu yapıyor destekler. Ancak, in many cases bu o bunlardan biri düzenli bir sayısı () iki ifadeleri kullanarak eski moda şekilde yapmak aslında daha hızlı çıkıyor. Ancak bu sayma bu çok sorgu için durum olmayacak olan, bir dizin tarama kullanılarak yapılabilir, ama ben yine de söz düşündüm gerektirmez.

Bu aynı ihtiyacı olan başkaları (bu sorunun zaman 3 yıl geçti düşünüyor) içindir.

Ben benzer bir sorunu vardı ve ben 2 sorguları oluşturmak istemedim. Peki ne yaptım toplam sayısı için ek bir sütun oluşturmak oldu ve LIMIT ve sonunda OFFSET cümleleri taşındı:

SELECT SQL_CALC_FOUND_ROWS * FROM (
    SELECT `id`, `name`
    FROM `my_table`
    WHERE `name` LIKE '%prashant%'
) res,
(SELECT /*CEIL(FOUND_ROWS()/10) AS 'pages',*/ FOUND_ROWS() AS 'total') tot
LIMIT 0, 10

Yani sonuç gibi bir şey olduğunu

| id  |      name      | total |
+-----+----------------+-------+
|  1  | Jason Prashant |  124  |
|  2  | Bob Prashant   |  124  |
|  3  | Sam Prashant   |  124  |
|  4  | etc. prashant  |  124  |

ve bunun sadece bir kez sonuç alınır ve daha sonra ek sütun için already calculated satır sayısı kullandığı için, bu çözelti, bir zamanlama herhangi bir dezavantajı olduğunu düşünüyorum.