Count(*) работает не так

152
15 декабря 2016, 15:45

После того, как поставил в запрос COUNT(*) as count, началась выводиться только 1 запись, хотя $data['count'] показывает, что их 3. Если же убрать COUNT(*) as count, то всё станет нормально, будут выводиться 3 записи, а не 1.

В чём может быть проблема?

$query = $db->query("
 SELECT COUNT(*) as count, support_questions.id ... 
 FROM `table` 
  INNER JOIN ...
");
while($data = $db->fetch($query)) {
 echo $data['id']
}
Answer 1

Если нет группировки (GROUP BY), то весь набор считается одной группой, и, соответственно, вы получите одну строку. Вам стоит почитать о группировке.

Answer 2

Это не проблема, а нормальное поведение.
Ознакомьтесь с использованием агрегатных функций например здесь:
http://www.sql.ru/docs/sql/u_sql/ch6.shtml
Если в выборке использована агрегатная функция, то возвращается одна строка, если при этом использовано GROUP BY то возвращается несколько строк.

Answer 3

Если я правильно понял вопрос, вы хотите сделать выборку, ограниченную лимитом, и при этом посчитать количество записей вообще. В MySQL можно сделать так:

SELECT SQL_CALC_FOUND_ROWS support_questions.id
...

и после этого выполнить второй запрос:

SELECT FOUND_ROWS();

См. детальное описание опции.

Answer 4

Если простыми словами, то добавление count(*) схлопывает (агрегирует) все строки результата в одну. Вместо них выдаётся количество исходных строк

READ ALSO
Обновить базу один раз

Обновить базу один раз

Вот кодМне нужно, чтобы он обновлял только один раз, а он обновляет каждый раз при обновлении

129
Загрузка файлов на сайт PHP

Загрузка файлов на сайт PHP

Файл загружается через форму а в обработчике вот такой код - файл загружается и на сайт и в базу но ссылка не него косячит - тоесть он не вызывается...

142
MySQL: подписан ли пользователь

MySQL: подписан ли пользователь

Есть 2 таблицы, с юзерами и с теми, на кого подписан юзер

145
Базы данных

Базы данных

Всем привет!

118