Выбрать отдельные строки из двух таблиц, упорядочить по дате

Я не хочу никого типа JOIN здесь. Я строю RSS-канал из двух таблиц с помощью PHP, и я хочу выбрать все строки из двух таблиц, сохраняя отдельные строки, но сортируя по общему столбцу created.

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

id      downloads   views   created
-----------------------------------------------
1       12          23      2011-07-22 00:10:16
2       51          900     2011-07-22 10:11:45
3       8           80      2011-07-23 04:12:18

И таблица bar:

id      title       body    created
-----------------------------------------------
1       foo         ogblog  2011-07-21 10:54:07
3       bar         zip     2011-07-24 10:54:07
4       zip         bar     2011-07-25 10:54:07

Я хочу выбрать все данные из обеих таблиц, упорядоченных по общему столбцу created, поэтому примерный набор результатов будет (игнорировать bar.id, поскольку он не нужен):

id      title       body        downloads   views   created             | table
-------------------------------------------------------------------------------
NULL    bar         zip         NULL        NULL    2011-07-24 10:54:07 | bar
NULL    foo         ogblog      NULL        NULL    2011-07-21 10:54:07 | bar
1       NULL        NULL        12          23      2011-07-22 00:10:16 | foo
2       NULL        NULL        51          900     2011-07-22 10:11:45 | foo
3       NULL        NULL        8           80      2011-07-23 04:12:18 | foo
NULL    zip         bar         NULL        NULL    2011-07-25 10:54:07 | bar

Столбец table не нужен; Я добавил его, чтобы сделать вещи немного легче понять.

Надеюсь, это очевидно, что я хочу делать; вместо того, чтобы делать JOIN, где строка создается из столбцов из двух таблиц, я хочу получить все данные строки с общим расположением столбцов, где любой столбец, который не существует в таблице, помещен в него.

Пожалуйста, дайте мне знать, если вам нужно уточнение.

Ответы

Ответ 1

Использование фиктивных столбцов для учета разных структур, объединение для их объединения и родительский выбор для обработки заказа:

SELECT * FROM (
    (SELECT foo.id, NULL AS title, NULL AS body, foo.downloads, foo.views, foo.created FROM foo)
    UNION ALL
    (SELECT NULL AS id, bar.title, bar.body, NULL AS downloads, NULL AS views, bar.created FROM bar)
) results
ORDER BY created ASC

Ответ 2

Расширяя предложение @Brendan Bullen, вот пример использования UNION ALL, который должен сработать для вас:

SELECT id as id, NULL as title, NULL as body, downloads as downloads, 
  views as views, created as created, 'foo' as table_name
FROM foo
UNION ALL
SELECT NULL as id, title as title, body as body, NULL as downloads, 
  NULL as views, created as created, 'bar' as table_name
FROM bar
ORDER BY created ASC