powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите создать запрос
13 сообщений из 13, страница 1 из 1
Помогите создать запрос
    #33524192
nik:-)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

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

Структура таблиц:

users(id int, login varchar)
messages(id int, userid int, message varchar)

Соответсвенно в поле userid таблицы messages записывается id соответсвующей строки в таблице users.

Формирую следующий запрос:

select u.login,count(m.id)
from users u, messages m
where u.id=m.userid

Всё замечательно работает до момента, пока для пользователя есть сообщения, а вот когда их нет, то неплохо бы вывести "0", но в выводе вообще отсутствует строка с пользователем, для которого нет сообщений.

Пожалуйста, помогите решить проблему. Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524200
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохо было бы поместить данное сообщение в ветку по соответствующей СУБД
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524201
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik:-)select u.login,count(m.id)
from users u, messages m
where u.id=m.useridСУБД какая?

для Оракла я бы написал так:
Код: plaintext
1.
2.
select u.login, nvl(cnt, 0 ) cnt
from users u, (SELECT id, count(*) cnt FROM messages GROUP BY id) m
where u.id=m.userid(+)
для других СУБД (+) надо заменить на какой-нибудь LEFT JOIN...
а GROUP BY нужна для всех СУБД.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524202
Фотография VirusXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select u.login,
         count(isnull(m.id,  0 ))
from users u
left join messages m on m.userid = u.id
это раздел - MSSQL
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524203
Фотография VirusXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, group by забыл впаять
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524205
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VirusXP
Код: plaintext
1.
         count(isnull(m.id,  0 ))

здесь точно нужен isnull?
я не знаю MSSQL, но могу предположить, что для пользователей у которых нет сообщений этот запрос ошибочно выдаст 1.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524207
Фотография VirusXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select u.login,
         sum(case when m.id is null then  0 
                       else  1 
               end)
from users u
left join messages m on m.userid = u.id
group by u.login
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524209
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VirusXP
Код: plaintext
1.
2.
3.
         sum(case when m.id is null then  0 
                       else  1 
               end)

а разве
Код: plaintext
count(m.id)
не даст тоже самое?
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524213
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VirusXP
Код: plaintext
1.
group by u.login

в исходных условиях нет гарантии, что логины не дублируются.
имхо, правильнее группировать по id
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524215
Фотография VirusXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я чесно говоря вообще не понимаю причем здесь messages.id ведь соединение таблиц идёт по messages.userid
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524216
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VirusXPя чесно говоря вообще не понимаю причем здесь messages.id ведь соединение таблиц идёт по messages.userid
я про user.id
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524217
Фотография VirusXP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftя про user.id
согласен. вот что значит пиво хреново влияет
...
Рейтинг: 0 / 0
Помогите создать запрос
    #33524734
nik:-)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, Вы все мне очень помогли.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите создать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]