MySQL: 2 Tabellen nach Datum sortieren

Nord-Süd-Richtung

Erfahrenes Mitglied
Hi,
da die Suche nichts treffendes ergeben hat frage ich wieder mal euch...
Ich habe zwei Tabellen, und möchte aus beiden die letzten 4 Einträge auslesen, also das es zusammen 4 sind. Für eine Tabelle sähe das ja so aus:

SELECT * FROM table ORDER BY Datum DESC Limit 0,4;

Wenn ich da noch eine andere Tabelle mit reinnehme (ich gehe davon aus das es möglich ist), was muss ich da noch hinzufügen?
 
Du kannst Ergebnismengen in SQL zu einer Ergebnismenge zusammenfassen. Da SQL ja spaltenorientiert arbeitet müssen die zusammenzuführenden Ergebnismengen exkat die gleichen Spalten (gleiche Anzahl, gleiche Datentypen, gleiche Namen in der gleichen Reihenfolge) aufweisen, ansonsten können die Ergebnismengen nicht zu einer vereint werden. Ergebnismengen vereinen kann man mit dem Schlüsselwert UNION.

Willst du beide Tabellen vereinen und dann die letzten 4 Einträge aus beiden Tabellen geht das so:
Code:
SELECT * FROM (
 (SELECT id, datum, spalte1, spalte2 FROM tableA) UNION (SELECT id, datum, spalte1, spalte2 FROM tableB)) ORDER BY datum DESC LIMIT 0,4

Haben die beiden Ergebnismengen jedoch nicht den gleichen Aufbau ist eine Vereinigung unmöglich.
 
Danke erstmal für die Antwort.
Ich erhalte jedoch folgende Fehlermeldung bei folgendem Code.

SELECT *
FROM (
(

SELECT id
FROM forum_thr
)
UNION (

SELECT id
FROM forum_post
)
)
ORDER BY Datum DESC
LIMIT 0 , 4

MySQL meldet: Dokumentation
#1248 - Every derived table must have its own alias
 
Sorry die Unterabfragen brauchen scheinbar noch nen Alias.
Aber es fehlt die Spalte Datum in deinen Unterabfragen nach der du die Vereinigungsmenge ja sortieren möchtest.

Die Abfrage dürfte in etwa so aussehen (f_datum und p_datum müssen noch durch die konkreten Spalten ersetzt werden in denen die jeweiligen Datumswerte stehen):

SELECT *
FROM (
(

SELECT id, t_datum AS Datum
FROM forum_thr
) as a
UNION (

SELECT id, p_datum AS Datum
FROM forum_post
) as b
) AS c
ORDER BY c.Datum DESC
LIMIT 0 , 4

Das select * ganz zu anfang bedeutet übrigens dass du alles aus den Unterabfragen zurückbekommst. Das sind im konkreten Fall die Spalte id und die Spalte Datum
 
Ok, ich musste noch AS a und AS b löschen, dann klappt es soweit, das ich id 42 erhalte, wobei in beiden Tabellen keine höher ist als 31.
Werden die zusammen addiert?
 
Zurück