2014-10-11 6 views
2

Обычно запрос ниже дает мне только один результат (строку).Как получить количество результатов (строк) в MySQL?

SELECT 
    `s`.`FIRMA_UNVANI` AS `FIRMA_UNVANI`, 
    `s`.`RECNO` AS `RECNO`, 
    `s`.`BOLGE` AS `BOLGE`, 
    `s`.`BOLGE_NO` AS `BOLGE_NO`, 
    `s`.`DURUM` AS `DURUM`, 
    l.ILCE, 
    IL.SEHIR, 
    count(i.recno) AS NUMBER_OF_WORKS 
FROM 
    `SERVISLER` `s` 
LEFT JOIN KULLANICI k ON (s.BOLGE = k.KULLANICI) 
LEFT JOIN kullanici_cihaz kc ON (k.RECNO = kc.KUL_RECNO) 
LEFT JOIN servisler_ilceler c ON (s.RECNO = c.SER_RECNO) 
INNER JOIN ILCE l ON (l.RECNO = c.ILCE_RECNO) 
INNER JOIN IL ON (IL.ID = l.ILID) 
LEFT JOIN ISEMRI i ON (
    i.bolge = s.bolge_no 
    AND i.`SERVIS_DURUMU` = 1 
) 
WHERE 
    1 = 1 
GROUP BY 
    s.BOLGE 
ORDER BY 
    IS_SAYISI 
LIMIT 0, 
15 

я получаю только один результат

+----------------+-------+------+---------+------+-----+----------+-----------------+ 
|FIRMA_UNVANI |RECNO |BOLGE |BOLGE_NO |DURUM |ILCE | SEHIR | NUMBER_OF_WORKS | 
+----------------+-------+------+---------+------+-----+----------+-----------------+ 
|Pirana   |2501 |Tekkt |58  |-1 |NT |Istanbul |1428    | 
+----------------+-------+------+---------+------+-----+----------+-----------------+ 

Здесь ключ RECNO.

Я хочу подсчитывать результаты:

SELECT 
    count(0) AS _count 
FROM 
    `SERVISLER` `s` 
LEFT JOIN KULLANICI k ON (s.BOLGE = k.KULLANICI) 
LEFT JOIN kullanici_cihaz kc ON (k.RECNO = kc.KUL_RECNO) 
LEFT JOIN servisler_ilceler c ON (s.RECNO = c.SER_RECNO) 
INNER JOIN ILCE l ON (l.RECNO = c.ILCE_RECNO) 
INNER JOIN IL ON (IL.ID = l.ILID) 
LEFT JOIN ISEMRI i ON (
    i.bolge = s.bolge_no 
    AND i.`SERVIS_DURUMU` = 1 
) 
WHERE 
    1 = 1 
GROUP BY 
    s.BOLGE 

И я получаю этот результат: проводное

1428 

Он должен был быть 1. Не так ли?

ответ

3

В результате прекрасно, так как вы просто подсчет 0 для каждой строки вместо i.recno, поэтому и в результате 1428

Для подсчета количества результатов, вы можете обернуть весь запрос, как это получить resultcount:

SELECT count(*) AS resultcount FROM (
    SELECT 
     `s`.`FIRMA_UNVANI` AS `FIRMA_UNVANI`, 
     `s`.`RECNO` AS `RECNO`, 
     `s`.`BOLGE` AS `BOLGE`, 
     `s`.`BOLGE_NO` AS `BOLGE_NO`, 
     `s`.`DURUM` AS `DURUM`, 
     l.ILCE, 
     IL.SEHIR, 
     count(i.recno) AS NUMBER_OF_WORKS 
    FROM 
     `SERVISLER` `s` 
    LEFT JOIN KULLANICI k ON (s.BOLGE = k.KULLANICI) 
    LEFT JOIN kullanici_cihaz kc ON (k.RECNO = kc.KUL_RECNO) 
    LEFT JOIN servisler_ilceler c ON (s.RECNO = c.SER_RECNO) 
    INNER JOIN ILCE l ON (l.RECNO = c.ILCE_RECNO) 
    INNER JOIN IL ON (IL.ID = l.ILID) 
    LEFT JOIN ISEMRI i ON (
     i.bolge = s.bolge_no 
     AND i.`SERVIS_DURUMU` = 1 
    ) 
    GROUP BY 
     s.BOLGE 
    ORDER BY 
     IS_SAYISI 
    LIMIT 0, 15) AS temp 

Также обратите внимание, что WHERE 1=1 не является необходимым.

+1

Ему нужно только «temp» в самом конце. – ilhan

2

Вы использовали GROUP BY в запросе, так что вы получите каждый счетчик группы в результате, например, если есть 3 группы, то вы получите 3 счета результата ..

Если вам необходимо получить количество строк результата, то пожалуйста, используйте подзаголовок, см. ниже

SELECT count(0) AS _count FROM(
    SELECT 
    * 
    FROM 
    `SERVISLER` `s` 
    LEFT JOIN KULLANICI k ON (s.BOLGE = k.KULLANICI) 
    LEFT JOIN kullanici_cihaz kc ON (k.RECNO = kc.KUL_RECNO) 
    LEFT JOIN servisler_ilceler c ON (s.RECNO = c.SER_RECNO) 
    INNER JOIN ILCE l ON (l.RECNO = c.ILCE_RECNO) 
    INNER JOIN IL ON (IL.ID = l.ILID) 
    LEFT JOIN ISEMRI i ON (
    i.bolge = s.bolge_no 
    AND i.`SERVIS_DURUMU` = 1 
    ) 
    WHERE 
    1 = 1 
    GROUP BY 
    s.BOLGE 
) AS Temp; 
Смежные вопросы