Najlepszym sposobem jest utworzenie nowej tabeli zawierającej wspólne pola z trzech pozostałych tabel i dodanie indeksu do wspólnego pola daty. Oryginalne trzy tabele powinny zawierać klucz obcy powiązany ze wspólną tabelą. Z tym wzorem kwerenda staje się prosta:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Jeśli trzeba także dane z bardziej szczegółowych tabel można użyć LEFT JOIN również zaznaczyć, że dane w tym samym zapytaniu.
Jeśli nie mogą zmienić swój wygląd i wydajność nie jest problemem, a następnie można użyć UNION ALL, aby połączyć wyniki ze wszystkich trzech tabel przed sortowaniem:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Należy zauważyć, że powyższe będzie działać tylko wtedy, wszystkie stoły mają taką samą strukturę. Jeśli masz pola, które występują w jednej tabeli, ale nie w innych, to powinieneś pominąć je w SELECT lub zwrócić NULL dla tej kolumny w innych tabelach. Na przykład, jeżeli:
table1
ma kolumn a
, b
, c
i date
.
table2
ma kolumny b
, c
i date
.
table3
ma kolumny a
, c
i date
.
Następnie użyj tego:
SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100
Co powiesz na wydajność, jeśli trzy stoły mają wiele rekordów? – vietean