PHP / MySQL COUNT не работает должным образом - PullRequest
4 голосов
/ 21 сентября 2009

Я вырываю свои волосы ради этого, что не так с этим запросом:

  SELECT COUNT(id), * 
    FROM location 
   WHERE country = '$country' 
     AND LCASE(namenodiacritics) LIKE LCASE('%$locname%') 
ORDER BY name ASC

Могу ли я СЧИТАТЬ (id) и * в одном запросе?

Я получаю эту ошибку:

В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '* FROM location WHERE country =' AQ 'И LCASE (namenodiacritics) LIKE LCASE (' %% '' в строке 1

Странно то, что он работает с «SELECT COUNT (id) FROM ...», а также «SELECT * FROM ...».

Ответы [ 4 ]

5 голосов
/ 21 сентября 2009

Использование COUNT() без GROUP BY уменьшает результат до одной строки. Таким образом, вы не можете получить значимые значения в остальных столбцах.

Вы можете сделать это в двух запросах:

  -- this returns a single row
  SELECT COUNT(id)
    FROM location 
   WHERE country = '$country' 
     AND LCASE(namenodiacritics) LIKE LCASE('%$locname%');

  -- this returns multiple rows, one per matching location    
  SELECT *
    FROM location 
   WHERE country = '$country' 
     AND LCASE(namenodiacritics) LIKE LCASE('%$locname%')
ORDER BY name ASC;
4 голосов
/ 21 сентября 2009

Выбор COUNT(id) и * в одном запросе не имеет смысла. Если вам действительно нужно получить все остальные поля, просто используйте 'SELECT * FROM ...', и достаточно просто получить количество строк, возвращаемых с помощью PHP.

1 голос
/ 21 сентября 2009

Что вы пытаетесь посчитать?

Подсказка: вам, вероятно, следует использовать группирование по чему-либо, если вы используете агрегатную функцию, такую ​​как COUNT ()

0 голосов
/ 21 сентября 2009

Хочешь этого?

  SELECT (SELECT COUNT(*) FROM location) as cnt, * 
    FROM location 
   WHERE country = '$country' 
     AND LCASE(namenodiacritics) LIKE LCASE('%$locname%') 
ORDER BY name ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...