Как показать "repost" как ретвиты в запросе mysql?

LOSDEV спросил: 13 июня 2018 в 11:51 в: mysql

Я работаю над проектом, в котором у меня есть сообщения, которые можно переписать в чистый стиль twitter (retweets). Сообщения сохраняются в таблице "posts" (id, userid, title, content, date), а репозитории сохраняются в другой таблице "reposts" (postid, userid, date). Мне нужно показывать сообщения и повторы пользователя, упорядоченного в хронологическом порядке и в порядке убывания.

До сих пор мне удалось показать обе таблицы, но репозиции показаны упорядоченными с датой создания пост, а не дату репоста. Если я отправлю сообщение от 2 лет назад, я хочу, чтобы сообщение отображалось сейчас (дата репостата) и не заказывалось с сообщениями от 2 лет назад (дата сообщений).

Это мой запрос:

SELECT * FROM (SELECT p.* FROM post AS p WHERE userid='$id' UNION SELECT p.* FROM post AS p WHERE p.id IN (SELECT postid FROM repost WHERE userid='$id')) a ORDER BY date DESC

2 ответа

Bleach ответил: 13 июня 2018 в 12:07
Счастливый кто-то ответил. Этот запрос вызвал у меня головокружение. @LOSDEV, я бы предложил в будущем не повесить на все, что вы пытаетесь сделать в одном запросе. Создавайте временные таблицы, если вам нужно. Получите свой конечный результат, пройдя по нему, а затем попытайтесь создать свой окончательный запрос на основе этих шагов.
Есть решение
sticky bit ответил: 13 июня 2018 в 12:04

Присоедините reposts и posts и выберите нужные столбцы из каждой таблицы.

SELECT *
       FROM (SELECT p1.postid,
                    p1.userid,
                    p1.title,
                    p1.content,
                    p1.date
                    FROM posts p1
                    WHERE p1.userid = ?
             UNION ALL
             SELECT r1.postid,
                    r1.userid,
                    p2.title,
                    p2.content,
                    r1.date
                    FROM reposts r1
                         INNER JOIN posts p2
                                    ON p2.postid = r1.postid
                    WHERE r1.userid = ?) x
       ORDER BY x.date DESC;
LOSDEV ответил: 13 июня 2018 в 12:21
Спасибо вам большое, я сошел с ума. Мне нужно узнать больше о mysql. И спасибо за отзыв Bleach! ^^