UNION mit RAND()

Sebigf

Erfahrenes Mitglied
Hallo zusammen !

Ich habe eine Query erstellt.
Code:
SELECT tabelle_A.id, tabelle_A.date FROM tabelle_A UNION
SELECT tabelle_B.id, tabelle_B.date FROM tabelle_B UNION
SELECT tabelle_C.id, tabelle_C.date FROM tabelle_C GROUP BY id ORDER BY date LIMIT 0,1

Ich möchte es so haben, dass ich von allen 3 Tabellen den jeweils letzten Eintrag auslese (sortiert nach Datum), und dann mit RAND() einen der 3 Gesamten (von jeder Tabelle eben einer) ausgegeben wird.

Wie mache ich das ?

Danke
 
Leider hast du nicht angegeben mit was für einer DB du arbeitest, aber ich gehe mal von MySQL aus.

Versuche mal folgendes:
Code:
SELECT tabelle_A.id, tabelle_A.date FROM tabelle_A UNION
SELECT tabelle_B.id, tabelle_B.date FROM tabelle_B UNION
SELECT tabelle_C.id, tabelle_C.date FROM tabelle_C ORDER BY date,rand() LIMIT 0,3

Das dürfte dir immer die gleichen 3 datensätze liefern, aber immer in anderer Reihenfolge, wobei bei 3 auch schon mal der gleiche Datensatz mehrmals oben stehen kann.

Anschliessend zeigst du einfach immer den ersten datensatz an.

Ein order by date und rand und limit 1 wird nicht gehen, ausser mit einer subquery, aber das ist noch komplizierter, demnach ist es einfacher 3 datensätze abzurufen, aber nur einen anzuzeigen...

Marcus
 
Möglicherweise sollten die Einzelabfragen noch eingeklammert werden:
Code:
      ( SELECT `id`, `date` FROM `tabelle_A` ORDER BY `datum` LIMIT 1 )
UNION ( SELECT `id`, `date` FROM `tabelle_B` ORDER BY `datum` LIMIT 1 )
UNION ( SELECT `id`, `date` FROM `tabelle_C` ORDER BY `datum` LIMIT 1 )
  ORDER BY
        RAND()
  LIMIT
        1
 
Zurück