операторы orderby для нескольких объединений - PullRequest
0 голосов
/ 10 августа 2009

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

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

Ответы [ 2 ]

3 голосов
/ 10 августа 2009

СОЮЗ без соединений был бы возможен.

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

0 голосов
/ 10 августа 2009

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

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

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

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

...