Vinzenz Mai: UNION (... ORDER BY RAND())

Beitrag lesen

Hallo

ich habe eine Tabelle mit "klassierten" Datensätzen, d.h. jeder Datensatz hat bspw. Klasse A oder Klasse B (Spalte 'klasse'). Nun möchte ich aus jeder Klasse zufällig einen Datensatz auslesen.

SELECT * FROM table GROUP BY klasse ORDER BY RAND() LIMIT 2


> liefert nicht das gewünschte Ergebnis.  
  
das war auch von dieser Abfrage, die jedes DBMS außer MySQL als syntaktisch  
falsch zurückweist, nicht zu erwarten. Immerhin bekommst Du unvorhersagbare  
Ergebnisse - reicht Dir das noch nicht ;-)  
  

> Ich möchte, dass die einzelnen Klassen sortiert werden, nicht die 2 Datensätze, die durch GROUP BY entstehen. Wie ist das (am besten in einer Abfrage) möglich?  
  
Mit [UNION](http://dev.mysql.com/doc/refman/5.0/en/union.html):  
  
<zitat>  
    To apply ORDER BY or LIMIT to an individual SELECT, place the clause  
    inside the parentheses that enclose the SELECT:  
  
    (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)  
    UNION  
    (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);  
</zitat>  
  
Ausgehend von diesem Handbuchbeispiel solltest Du Dein Problem leicht lösen können.  
  
  
Freundliche Grüße  
  
Vinzenz