@BigDaddySigma

Как сортировать по полю из другой таблицы?

Есть две таблицы users, f_list нужно выбрать все поля из f_list и отсортировать их по полю last_visit из таблицы users если id из users равен id_sender или id_receiver записи из f_list. Короче если по простому нужно отсортировать записи по тому когда в последний раз пользователь был на сайте.

SELECT f.*, u.last_visit
FROM f_list f, users u
WHERE f.id_receiver = 11 or f.id_sender = 11
ORDER BY u.last_visit DESC


Пытался так выдает в правильном порядке но почему то дублирует записи 6 раз.
Если можно с примером.
  • Вопрос задан
  • 367 просмотров
Решения вопроса 1
@galaxy
SELECT f.*, u.last_visit
  FROM f_list f, users u
 WHERE u.id = f.id_sender AND f.id_receiver = 11
 UNION
SELECT f.*, u.last_visit
  FROM f_list f, users u
 WHERE u.id = f.id_receiver AND f.id_sender = 11
 ORDER BY last_visit desc


sqlfiddle.com/#!9/cb52eb/2

Вы пытались смешать в одну кучу sender/receiver, а это два джойна, вообще говоря. Т.к. интересут текущий user, проще делать один джойн + объединение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
ты на каждую запись из f_list (отфильльтрованную по условию в where) выводишь ВСЕ users, вот они и умножаются
sql это про умножение таблиц друг на друга, когда они указаны во from

необходимо задать условие как связаны записи из f_list с users, обычно это foreign key индексы (или у тебя там еще табличка промежуточная)

так что схему в студию, описывай смысл хранящихся данных в твоих таблицах и что хочешь получить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы