получить данные из 3 таблиц

Статус
В этой теме нельзя размещать новые ответы.

xorbit

Гуру форума
Регистрация
13 Июн 2007
Сообщения
105
Реакции
95
такая задача возникла нужно получить список с такими данными

ид пользователя, имя пользователя, кол.-во входящих сообщений, кол.-во исходящих сообщений

из таблиц:

users_group
id_group, id_user

users
id, name

messages
id, id_sender, id_recipient



SELECT u.id, u.name, COUNT(ms.sender) AS send, COUNT(mr.recipient) AS rec

FROM user AS u
LEFT JOIN messages AS ms ON (u.id = ms.sender)
LEFT JOIN messages AS mr ON (u.id = mr.recipient)
WHERE
u.id IN (SELECT id_user
FROM users_group
WHERE id_group=5 ORDER BY id_user)

LIMIT 0,100
 
Не пойдет ли так:

select u.id, min(u.name) as name, count(ms.sender) as send, count(mr.recipient) as rec
from users u
left join messages ms on ms.id_sender=u.id
left join messages mr on mr.id_recipient=u.id
left join users_group gr on gr.id_user=u.id
where gr.id_group=5
group by u.id

поскольку count агрегатная функция, то нужно добавлять группировку
 
спасибо помогло, подскажи плиз что почитать что б больше не задавать дурацких вопросов )

протестировал запросы с join и подзапрос, без под запроса значительное ускорение...
 
не совсем все гладко почемуто если при написанных 3 и полученных 2 выводит что отправил и получил по 6 ...
 
все тему можно закрыть!
задача была решена с при помощи подзапросов

SELECT u.ID, u.NickName,
(SELECT count(*) FROM messages ms WHERE u.ID = ms.Sender) AS Sender,
(SELECT count(*) FROM messages mr WHERE u.ID = mr.Recipient) AS Recipient
FROM users u
LEFT JOIN user_group ug ON (ug.idProfile = u.ID)
WHERE ug.idAff=5
GROUP BY u.ID, u.NickName
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху