MySQL COUNT () вызывает возврат пустого array () - PullRequest
0 голосов
/ 23 июня 2011

Версия сервера MySQL: Версия сервера: 4.1.14

Версия клиента MySQL: 3.23.49

Обсуждаемые таблицы: ads_list и ads_cate.

Таблица отношений: ads_cate имеет много ads_list.

При поддержке: ads_cate.id = ads_list.Category.

Я не уверен, что здесь происходит, но я пытаюсь использовать COUNT () впростой агрегированный запрос, и я получаю пустой вывод.

Вот простой пример, который возвращает ожидаемые результаты:

$queryCats = "SELECT id, cateName FROM ads_cate ORDER BY cateName";

Но если я изменю его, добавив COUNT () и другиеданные запроса я не получаю возвращаемый массив w / print_r () (без результатов)?

$queryCats = "SELECT ads_cate.cateName, ads_list.COUNT(ads_cate.id), 
FROM ads_cate INNER JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName ORDER BY cateName";

В конечном итоге я пытаюсь получить количество элементов ad_list в каждой категории.

Есть ли конфликт версий MySQL с тем, что я пытаюсь сделать здесь?

ПРИМЕЧАНИЕ: я потратил некоторое время на разбивку этого элемента, элемент за элементом, и COUNT (), кажется, вызывает массив() исчезнуть.И казалось, что JOIN делает то же самое ... Это не помогает, я разрабатываю это на сервере Yahoo без доступа к настройкам ошибки php или mysql.

Ответы [ 5 ]

2 голосов
/ 23 июня 2011

Количество является совокупным. означает, что когда-либо будет возвращен набор результатов, хотя бы один

здесь вы можете попробовать считать ads_list.id не ноль, но это неправильно. как, скажем, Myke Count (ads_cate.id) или Count (ads_list.id) лучше подходит

у вас есть внутреннее объединение ads_cate.id = ads_list.category, поэтому нет необходимости в Count (ads_cate.id) или COUNT (ads_list.id), просто count (*)

Теперь, если вы не хотите ноль, добавьте

только совпадение

SELECT ads_cate.cateName, COUNT(*), 
FROM ads_cate INNER JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName 
having not count(*) is null
ORDER BY cateName

все

SELECT ads_cate.cateName, IFNULL(COUNT(*),0), 
FROM ads_cate LEFT JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName    
ORDER BY cateName
2 голосов
/ 23 июня 2011

Я думаю, что ваш синтаксис COUNT неверен.Это должно быть:

COUNT(ads_cate.id)

или

COUNT(ads_list.id)

в зависимости от того, что вы рассчитываете.

1 голос
/ 23 июня 2011

Ваш массив пуст или пропал, потому что ваш запрос содержит ошибки:

  1. не должно быть запятой перед ОТ
  2. "список объявлений". префикс перед COUNT неверен

Пожалуйста, попробуйте выполнить этот запрос непосредственно в MySQL, и вы увидите ошибки. Или попробуйте повторить вывод, используя mysql_error ().

Теперь, некоторые другие пункты, связанные с вашим запросом:

  1. нет необходимости выполнять ORDER BY, потому что GROUP BY по умолчанию сортирует по сгруппированному столбцу
  2. вы делаете подсчет в неправильном столбце, который всегда будет давать вам 1

Возможно, вы пытаетесь получить счетчик ads_list на ads_cate? Тогда это может быть ваш запрос:

SELECT `ads_cate`.`cateName`, COUNT(`ads_list`.`category`) `cnt_ads_list`
FROM `ads_cate`
INNER JOIN `ads_list` ON `ads_cate`.`id` = `ads_list`.`category`
GROUP BY `cateName`;

Надеюсь, это поможет?

1 голос
/ 23 июня 2011

Вы пробовали:

$queryCats = "SELECT ads_cate.cateName, COUNT(ads_cate.id) 
              FROM ads_cate
              JOIN ads_list ON ads_cate.id = ads_list.category
              GROUP BY ads_cate.cateName";

Я предполагаю, что вам нужно, чтобы категория была в списке, в этом случае запрос здесь должен работать. Попробуйте сначала без ORDER BY.

1 голос
/ 23 июня 2011

Возможно, вы получили ошибки.Проверьте журналы вашего сервера.

Также посмотрите, что произойдет, когда вы попробуете это:

SELECT COUNT(*), category 
FROM ads_list 
GROUP BY category
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...