varias unir una tablas tabla seleccionar relacionadas mostrar hacer datos cruzar consulta como mysql

mysql - unir - Seleccione filas separadas de dos tablas, ordenadas por fecha



select de dos tablas mysql (2)

No quiero ningún tipo de JOIN aquí. Estoy creando una fuente RSS de dos tablas usando PHP, y quiero seleccionar todas las filas de las dos tablas, manteniendo las filas separadas pero ordenando por una columna created común.

Por ejemplo, si tengo una tabla 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

Y una bar mesa:

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

Quiero seleccionar todos los datos de ambas tablas ordenadas por la columna created comúnmente, por lo que un conjunto de resultados de ejemplo sería ( ignorando bar.id ya que no es necesario ):

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

La columna de la table no es necesaria; Lo agregué para hacer las cosas un poco más fáciles de entender.

Ojalá sea obvio lo que quiero hacer; en lugar de hacer una JOIN donde se genera una fila a partir de columnas de dos tablas, quiero obtener todos los datos de las filas con un diseño de columna común donde cualquier columna que no exista en una tabla tiene NULL .

Por favor, hágamelo saber si necesita una aclaración.


Ampliando la sugerencia de @Brendan Bullen, aquí hay un ejemplo que usa UNION ALL que debería funcionar para usted:

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


Usando columnas ficticias para tener en cuenta las diferentes estructuras, una unión para unirlas y una selección primaria para manejar el ordenamiento:

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