У меня есть три таблицы, каждая из которых содержит auto-incrementing PK. Мне нужно выбрать последние (т.е. ORDERBY DESC) записи из сочетания этих таблиц.
Я хотел бы сделать это в одном запросе с двумя объединениями.
Моя идея состояла в том, чтобы как-то выбрать таблицу, заказать ее id DESC
, а затем как-то объединить результаты.
У кого-нибудь есть способ (или, вероятно, лучшая идея) сделать это?
(используя mysql)
EDIT:
Извините - здесь более подробная спецификация:
У меня три таблицы, posts
, stories
, favs
.
Каждый из них имеет (по крайней мере) три столбца id
, uid
и date
. Они оба PK. id
auto-increments (отдельно для каждой таблицы). uid
является FK, но это не имеет значения. Мне нужен набор результатов, содержащий последние 20 или 30 записей.
UNION без соединений будет возможной.
Подробнее см. http://dev.mysql.com/doc/refman/5.0/en/union.html.
Поскольку таблицы не имеют отношения, объединение их не имеет никакого смысла, правильно?
Насколько я понял, вы хотите заказать записи, происходящие из 3 разных таблиц, в одном результирующем наборе по дате создания. Существует два способа добиться этого:
Использовать PK, который является сортируемым и уникальным для всех трех таблиц. Я знаю, что вы можете сделать это легко в PostgreSQL. В MySQL вам нужно обходное решение: Создайте 4-ю таблицу с автоматическим приращением PK и измените остальные 3 таблицы PK на FK, указывая на 4-ю таблицу PK. Это несколько громоздко, и вам нужно знать, что поле автоматического инкремента не является хорошим кандидатом для надежно сортируемого свойства (удаление записей приводит к пробелам в последовательности, которые могут быть заполнены позже).
Добавьте столбец created
в каждую из трех таблиц и сохраните дату создания каждой записи. Затем UNION может быть отсортирован по этой колонке. У вас уже есть столбец date
. Вы не можете использовать этот столбец?