Am besten erstellen Sie eine neue Tabelle, die die gemeinsamen Felder aus den drei anderen Tabellen enthält, und fügen einen Index für das gemeinsame Datumsfeld hinzu. Die ursprünglichen drei Tabellen sollten einen Fremdschlüssel enthalten, der mit der gemeinsamen Tabelle verknüpft ist. Mit diesem Design wird die Abfrage einfach:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Wenn Sie auch Daten aus den spezifischeren Tabellen benötigen, können Sie LEFT JOINs verwenden, um diese Daten auch in derselben Abfrage auszuwählen.
Wenn Sie Ihr Design nicht ändern können und die Leistung kein Problem darstellt, können Sie UNION ALL verwenden, um die Ergebnisse aus allen drei Tabellen vor dem Sortieren zu kombinieren:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Beachten Sie, dass das obige nur funktioniert, wenn alle Tabellen die gleiche Struktur haben. Wenn Sie Felder haben, die in einer Tabelle vorkommen, aber nicht in anderen, sollten Sie sie aus dem SELECT weglassen oder NULL für diese Spalte in den anderen Tabellen zurückgeben. Zum Beispiel wenn:
table1
hat Spaltena
,b
,c
unddate
.table2
hat Spaltenb
,c
unddate
.table3
hat Spaltena
,c
unddate
.
Verwenden Sie dann Folgendes:
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