Порядок строк по дате собирать из нескольких таблиц?

0

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

Таблица 1:

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

Таблица 2:

 -------------------------
|   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)

Но результат It print заключается в том, что он получает таблицу1 сначала и все ее строки, а затем переходит к таблице2.

  • 1
    Возьмите ORDER BY с из вашего запроса, завернуть его в другой SELECT , и положить один ORDER BY на том , что вместо этого. Что-то вроде SELECT x.uid FROM (SELECT uid, date FROM t1 UNION SELECT uid, date FROM t2) x ORDER BY x.date
  • 0
    @TylerRoper Точно то, о чем я думал (хотя и использовал union all ). Опубликуйте это как ответ.
Показать ещё 5 комментариев
Теги:
mariadb

2 ответа

1
Лучший ответ

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

Если вы хотите сохранить порядок объединенных результирующих наборов, вам необходимо применить его еще раз. Для этого используйте подзапрос. Вам нужно будет переместить столбец 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
  • 0
    Я получаю сообщение об ошибке: Incorrect usage of UNION and ORDER BY и я полагаю, что t перед ORDER BY является ошибкой?
  • 0
    @ Ваджид попробуй сейчас. Я включил скобки. Буква t необходима, поскольку она назначает псевдоним (имя) нашей таблицы, выходящий из подзапроса.
Показать ещё 7 комментариев
0

Я пытаюсь использовать 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
    Скажите, пожалуйста, как этот запрос работает для вас, когда вы заказываете столбец, которого на самом деле нет?
  • 0
    Это может быть показать ожидаемый результат. Так как, порядок по среднему значению, запрос будет порядка от 1 до 4 (Смит, Джон, Норк, Марк). Если вы сделаете заказ с помощью desc, результат запроса будет показан с 4 по 1. (Марк, Норк, Джон, Смит). @KamilG.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню