• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Чей глюк?

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

Sinful

Уже 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

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

Burunduk-13

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

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

Sinful

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

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

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

Burunduk-13

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

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

Sinful

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!