Как заказать 2 стола в союзе? - PullRequest
0 голосов
/ 04 декабря 2018

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

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

SELECT threads.id AS thread, 
       updated_at 
FROM   threads 
WHERE  threads.id IN (SELECT thread_id 
                      FROM   posts 
                      WHERE  posts.id IN (SELECT post_id 
                                          FROM   post_recipients 
                                          WHERE  status = 1 
                                             AND 
                             user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17')) 
ORDER  BY updated_at DESC 
UNION 
SELECT thread_id AS thread, 
       updated_at 
FROM   thread_assignments 
WHERE  user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17' 
   AND status = 0 
   AND thread_id NOT IN (SELECT threads.id AS thread 
                         FROM   threads 
                         WHERE  threads.id IN (SELECT thread_id 
                                               FROM   posts 
                                               WHERE 
                                posts.id IN (SELECT post_id 
                                             FROM   post_recipients 
                                             WHERE  status = 1 
                                                AND 
       user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17')) 
                        ) 
ORDER  BY updated_at DESC;

, чтобы было ясно, я не хочу, чтобы итоговая таблица, упорядоченная updated_at, могла поставить сообщения о прочтении выше, чем непрочитанное сообщение.,Я хочу, чтобы 2 таблицы были заказаны отдельно, а затем склеены.

1 Ответ

0 голосов
/ 04 декабря 2018

В соответствии с предложением Teson создайте дополнительное поле, чтобы вы могли разделить оба вида

SELECT threads.id AS thread, 
       updated_at ,
       0 as union_source
FROM   threads 
WHERE  threads.id IN (SELECT thread_id 
                      FROM   posts 
                      WHERE  posts.id IN (SELECT post_id 
                                          FROM   post_recipients 
                                          WHERE  status = 1 
                                             AND 
                             user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17')) 
UNION 
SELECT thread_id AS thread, 
       updated_at, 
       1 as union_source
FROM   thread_assignments 
WHERE  user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17' 
   AND status = 0 
   AND thread_id NOT IN (SELECT threads.id AS thread 
                         FROM   threads 
                         WHERE  threads.id IN (SELECT thread_id 
                                               FROM   posts 
                                               WHERE 
                                posts.id IN (SELECT post_id 
                                             FROM   post_recipients 
                                             WHERE  status = 1 
                                                AND 
       user_id = 'b1367cad-e1ea-31ba-beb9-2b53559eea17')) 
                        ) 
ORDER  BY 
      union_source,
      updated_at DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...