Я пытаюсь подсчитать строки с одинаковым идентификатором
|curs_code|cursistnr|Mark|Payed| C# 20 6 50 PHP 25 8 100 C# 8 7 100
выход должен быть
C #, 2 раза
я пробовал
$sql = "SELECT count(curs_code) as 'count_of_curs' FROM cursus where curs_code='$id'"; $query = $magazijn->query($sql); return $query->fetchAll());
но дает мне этот результат:
C# array (size=1) 0 => array (size=2) 'count_of_curs' => string '1' (length=1) 0 => string '1' (length=1) PHP array (size=1) 0 => array (size=2) 'count_of_curs' => string '1' (length=1) 0 => string '1' (length=1)
ваша мысль об этом?
SELECT curs_code, count (*) как 'count_of_curs' FROM cursus, где curs_code = '$ id' group by curs_code
Удалите место, если хотите весь список.
Похоже, вопрос, который вы задаете, – «Почему выражение COUNT(curs_code)
возвращает значение 1, когда я ожидаю значение 2?»
Я думаю, что это означает, что два вхождения C#
которые кажутся вам одинаковыми, на самом деле являются разными значениями. Вероятно, это связано с «скрытыми» символами пробела в одном из значений.
Чтобы вернуть все значения curs_code
, содержащие строку C#
, и «увидеть» то, что на самом деле хранится, выполните такой запрос:
SELECT curs_code , HEX(curs_code) , CHAR_LENGTH(curs_code) FROM cursus WHERE curs_code LIKE '%C#%'
В качестве демонстрации:
SELECT cc , HEX(cc) , CHAR_LENGTH(cc) FROM ( SELECT 'C#' AS cc UNION ALL SELECT 'C#\t' UNION ALL SELECT 'C#\0' ) c WHERE cc LIKE '%C#%' cc HEX(cc) CHAR_LENGTH(cc) --- ------- --------------- C# 4323 2 C# 432309 3 C# 432300 3
Если вы просто хотите найти «повторяющиеся» значения curs_code:
SELECT c.curs_code , COUNT(1) AS count_of_curs_code FROM cursus GROUP BY c.curs_code HAVING COUNT(1) > 1 ORDER BY c.curs_code