GROUP BY... ORDER BY RAND()
Günther S
- datenbank
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.
[code=sql]
SELECT * FROM table GROUP BY klasse ORDER BY RAND() LIMIT 2
[/code]
liefert nicht das gewünschte Ergebnis.
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?
Gruß,
Günther
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
Hallo,
Mit UNION:
<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.
Allerdings, ich danke.
Gruß,
Günther
Hallo,
Mit UNION:
<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.
Aeh, wo bleibt der Zufall dabei?
Oder steh ich auf dem Schlauch?
Gruß
Reiner