операторы orderby для нескольких объединений

0

У меня есть три таблицы, каждая из которых содержит auto-incrementing PK. Мне нужно выбрать последние (т.е. ORDERBY DESC) записи из сочетания этих таблиц. Я хотел бы сделать это в одном запросе с двумя объединениями. Моя идея состояла в том, чтобы как-то выбрать таблицу, заказать ее id DESC, а затем как-то объединить результаты. У кого-нибудь есть способ (или, вероятно, лучшая идея) сделать это?

(используя mysql) EDIT: Извините - здесь более подробная спецификация: У меня три таблицы, posts, stories, favs. Каждый из них имеет (по крайней мере) три столбца id, uid и date. Они оба PK. id auto-increments (отдельно для каждой таблицы). uid является FK, но это не имеет значения. Мне нужен набор результатов, содержащий последние 20 или 30 записей.

  • 2
    к каким полям вы хотели бы присоединиться? Вы имели в виду союз случайно?
Теги:
join
sql-order-by

2 ответа

3

UNION без соединений будет возможной.

Подробнее см. http://dev.mysql.com/doc/refman/5.0/en/union.html.

0

Поскольку таблицы не имеют отношения, объединение их не имеет никакого смысла, правильно?

Насколько я понял, вы хотите заказать записи, происходящие из 3 разных таблиц, в одном результирующем наборе по дате создания. Существует два способа добиться этого:

  • Использовать PK, который является сортируемым и уникальным для всех трех таблиц. Я знаю, что вы можете сделать это легко в PostgreSQL. В MySQL вам нужно обходное решение: Создайте 4-ю таблицу с автоматическим приращением PK и измените остальные 3 таблицы PK на FK, указывая на 4-ю таблицу PK. Это несколько громоздко, и вам нужно знать, что поле автоматического инкремента не является хорошим кандидатом для надежно сортируемого свойства (удаление записей приводит к пробелам в последовательности, которые могут быть заполнены позже).

  • Добавьте столбец created в каждую из трех таблиц и сохраните дату создания каждой записи. Затем UNION может быть отсортирован по этой колонке. У вас уже есть столбец date. Вы не можете использовать этот столбец?

Ещё вопросы

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