Я пытаюсь заказать список знакомых текущего пользователя по количеству непрочитанных сообщений от друзей. Более непрочитанные сообщения, которые есть у друга по отношению к текущему пользователю, выше, он должен быть помещен в список.Mysql - orderby count of another statement
Мне удалось собрать запрос, который возвращает количество непрочитанных сообщений для текущего пользователя с определенного идентификатора пользователя.
SELECT COUNT(*) AS unread_msg
FROM messages m LEFT JOIN users u ON m.from_user_id = u.id
WHERE 1 /* Current user, unread msg to */ IN (from_user_id,to_user_id)
AND 2 /* Friend, unread msg from */ IN (from_user_id,to_user_id)
AND to_user_id = 1 /* Current user, unread msg to */
AND seen = 0
И с помощью SO-SQL гуру У меня есть запрос для списка друзей:
SELECT a.name_surname,
a.avatar,
GROUP_CONCAT(DISTINCT w.word ORDER BY w.word ASC) AS friend_words,
(a.friend_id) AS friend_msg_id /* Unread msg from id */
FROM (
SELECT f1.asked_user_id AS friend_id,
f1.created,
u.name_surname,
u.avatar
FROM friends AS f1
INNER JOIN friends AS f2 ON f1.asked_user_id = f2.asker_user_id
INNER JOIN users AS u ON f1.asked_user_id = u.id
AND f1.asker_user_id = f2.asked_user_id
WHERE f1.status = 1 AND f2.status = 1
AND f1.asker_user_id = 1 /* Current user id */
) a
LEFT JOIN connections c ON c.user_id = a.friend_id
LEFT JOIN words_en w ON c.word_id = w.id
GROUP BY 1
Любые идеи, как объединить эти запросы? Итак, я получаю unread_msg внутри второго запроса?
и скрипка: http://www.sqlfiddle.com/#!2/129a6/1
Спасибо! Ну, это возвращает 0 новых сообщений. На самом деле мне пришлось добавить GROUP BY 1 раньше) b - иначе он возвращал только 1 друга. В моем тестовом db пользователь имеет двух друзей и друзей, которые не могут иметь никаких слов и должны отображаться в любом случае, поэтому группа 1 помогает в этом. –
Я добавил полный db с большим количеством тестовых данных -> http://www.sqlfiddle.com/#!2/cfca5/2 –
, когда я копировал ваше решение, это сработало ... прежде чем я просто скопировал вложенную часть контейнера ... Или вы меняете что-то в моем запросе? Кажется, я не вижу разницы: S –