Чей глюк?

  • Автор темы Sinful
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sinful

Гость
#1
Уже 2 раз наталкиваюсь на глюк и немогу понять толи я просто неправельно запрос состовляю толи это бд глючит. Для примера простенький запрос

SELECT forum.*,
COUNT(m.messageId) count_message
FROM forum LEFT JOIN forum_messages m ON forum.forumId = m.forumId
WHERE 1
GROUP BY (m.forumId)

выбираем из таблице forum все данные и считаем количество сообщений для каждого. Вроде все классно, но если есть форумы в которых нет сообщенией т.е. count_message будет равен 0 то вернется только 1 форум с count_message = 0, их таких может быть хоть 10 но возвращает только 1. Я бы понял если бы база вобще не вернула значений с count_message = 0. Меня это вводит в полнейший транс, если кто знает в чем ошибка просветитя меня.
P.S. бд MySql 5.0.18
 
S

Sinful

Гость
#2
Да чуть не забыл не стоит писать как это можно сделать подругому. Это и так понятно интересно почуму этот вариант не работает
 
B

Burunduk-13

Гость
#3
> GROUP BY (m.forumId)
если нету сообщений, то m.forumId будет NULL. для ЛЮЫХ форумов, где нет сообщений. Поэтому и группировка такая.

простейшее решение - написать GROUP BY (forum.forumId). Должно группировать действительно по форумам.
 
S

Sinful

Гость
#4
> GROUP BY (m.forumId)
если нету сообщений, то m.forumId будет NULL. для ЛЮЫХ форумов, где нет сообщений. Поэтому и группировка такая.

простейшее решение - написать GROUP BY (forum.forumId). Должно группировать действительно по форумам.
Спасибо так действительно проще чем сделал я.
Но я так и не понял почему база возвращает все таки 1 запись с 0. Когда " m.forumId будет NULL. для ЛЮЫХ форумов, где нет сообщений".
 
B

Burunduk-13

Гость
#5
> Но я так и не понял почему база возвращает все таки 1 запись с 0. Когда " m.forumId будет NULL. для ЛЮЫХ форумов, где нет сообщений".

1. Идет группировка по m.forumId. Для этих форумов m.forumId всегда будет равно NULL. Поэтому все такие форумы группируются в одну запись.
2. COUNT(m.messageId) считает кол-во не-NULL элементов. Но, в нашем случае, все ИД сообщений (для форумов без сообщений) будут NULL, поэтому и возвращает 0.
 
S

Sinful

Гость
#6
Спасибо теперь наконец то догнал, теперь смогу спать спокойно:(
 
Статус
Закрыто для дальнейших ответов.