Нужно решить задачу с использованием объединения таблиц (JOIN)
- Пусть задан некоторый пользователь.
Из всех друзей этого пользователя найдите человека, который больше всех общался с нашим пользователем.
Это решение указанной задачи:
SELECT
from_user_id,
(select concat(firstname,'', lastname) from users where id = messages.from_user_id) as name,
COUNT(*) as send
FROM messages
where to_user_id = 1
AND from_user_id IN (
select initiator_user_id from friend_requests
WHERE (target_user_id = 1) and status ='approved'
UNION
select target_user_id from friend_requests
WHERE (initiator_user_id = 1) and status ='approved'
)
GROUP BY from_user_id
ORDER BY send desc
limit 6;
Необходимо решить указанную задачу, но уже с использованием объединения таблиц (JOIN)
Я попытaлся ее решить, но есть неточности. Прошу помочь
SELECT
from_user_id,
(messages.from_user_id = concat(firstname,'', lastname) from users where id) as name,
COUNT(*) as send
FROM messages
JOIN friend_requests ON to_user_id = target_user_id and from_user_id = initiator_user_id and status ='approved'
GROUP BY from_user_id
ORDER BY send desc
limit 4;
Ответы (1 шт):
Автор решения: Виктор Карев
→ Ссылка
SELECT
m.from_user_id,
(select concat(firstname,'', lastname) from users u where u.id = m.from_user_id) as name,
COUNT(*) as send
FROM messages m
JOIN friend_requests fr
ON (fr.status ='approved' AND
(fr.initiator_user_id = m.to_user_id AND fr.target_user_id = m.from_user_id
OR fr.target_user_id = m.to_user_id AND fr.initiator_user_id = m.from_user_id))
where m.to_user_id = 1
GROUP BY m.from_user_id
ORDER BY send desc
limit 6;