Нужно решить задачу с использованием объединения таблиц (JOIN)

  1. Пусть задан некоторый пользователь.

Из всех друзей этого пользователя найдите человека, который больше всех общался с нашим пользователем.

Это решение указанной задачи:

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;
→ Ссылка