Порядок строк по дате собирать из нескольких таблиц? - PullRequest
0 голосов
/ 23 мая 2018

Например, у меня есть таблицы ниже:

Таблица первая:

 -------------------------
|   UID    |    Date      |
 -------------------------
|   John   |     2        |
|   mark   |     4        |
 -------------------------

Таблица две:

 -------------------------
|   UID    |    Date      |
 -------------------------
|   smith  |     1        |
|   Nork   |     3        |
 -------------------------

Результат Я ожидаю, что будет таким, какой есть порядок по дате:

 ----------
|   smith  |
|   John   |
|   Nork   |
|   mark   |
 ----------

Я пытался:

(SELECT UID
  FROM table1 
  ORDER BY DATE DESC 
  LIMIT 16) 
UNION
(SELECT UID 
  FROM table2 
  ORDER BY DATE DESC 
  LIMIT 16)

НоВ результате получается, что он сначала получает table1 и все его строки, а затем переходит к table2.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Я пытаюсь с MySQL DB, как эти данные.это хорошо работает.Пожалуйста, попробуйте это:

  SELECT t.UID FROM
         (SELECT t1.UID,t.DATE FROM table1 t1 
            UNION ALL
          SELECT t2.UID,t.DATE FROM table2 t2 
          ) as t
        ORDER BY t.DATE ASC
0 голосов
/ 23 мая 2018

В вашем запросе вы отдельно сортируете каждый набор результатов из таблиц, чтобы применить ограничение к извлеченным строкам.

Если вы хотите сохранить порядок объединенных наборов результатов, вам нужно применить его еще раз.Используйте подзапрос для этой цели.Чтобы сделать это, вам нужно пройти дальше столбец date, поэтому я изменил значение UNION на UNION ALL, поскольку нам не нужно применять его на этом уровне.На более высоком уровне добавление DISTINCT позаботится об уникальных значениях.

SELECT DISTINCT UID
FROM (
  (SELECT UID, DATE FROM table1 ORDER BY DATE DESC LIMIT 16)
  UNION ALL
  (SELECT UID, DATE FROM table2 ORDER BY DATE DESC LIMIT 16)
  ) t
ORDER BY DATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...