Group By mit RAND() wie kann man das sonst lösen?

TribunM

Erfahrenes Mitglied
Hallo Freunde,

folgendes Problem ist dem einen oder anderen vielleicht bekannt. Ich habe eine Datenbank mit DVD und die haben unterschiedliche Genre. Jetzt möchte ich gerne eine kleine Box anzeigen, die immer 3 oder 4 Ergebnisse anzeigt wobei jedes Genre nur einmal auftauchen darf.

Ich habe mittlerweile 12 Genres, es sollen also auch nicht immer die gleichen Genres angezeigt werden.

Vereinfachter Aufbau der Tabelle DVD
ID, TITEL, GENRE, MEDIUM, DAUER, BEWERTUNG usw.

Dass ein
Code:
GROUP BY GENRE ORDER BY RAND()

nicht funktioniert, habe ich mittlerweile festgestellt. Ich habe es auch schon mit Subselects versucht, aber auch da ist das Ergebnis nicht wie gesucht.

Bisher ist das Ergebnis halt immer so, dass er zwar die Genres per Zufall wechselt, aber eben immer nur den letzten Eintrag einer Gruppe anzeigt. Das ist aber nicht das gewollte Verhalten.

Vielleicht hat Jemand von euch einen Lösungsansatz?

Greetz Tribbi
 
Rand wird während eines batches nur einmal ausgeführt hierzu hatte Thomas Darimont hier mal irgendwo im Forum einen Artikel geschrieben.

Als erstes möchtest du per Zufall das genre auswählen. Die 3 zufällig ausgewählten Genres müsstes du dir als erstes holen. ( das wäre also dann dein inneres Select )

Dann solltest du das äussere Select machen indem du die eigentlichen Titel nimmst.

Eine andere möglichkeit wäre die 3 Titel separat über unions auszuwählen also in etwa so:

SQL:
Select titel from  Dvd where genre =1 
union 
Select titel from  Dvd where genre =4
union 
Select titel from  Dvd where genre =7

aber wie gesagt ich glaube das der Artikel von TD dir da am meisten hilft.
Ich werde ihn mal suchen und dann hier verlinken

Grüsse

Alex

Edit :

Hier der link zum Post von Thomas :
http://www.tutorials.de/relationale-datenbanksysteme/371088-sql-server-zufallszahlen-erzeugen.html
 
Zuletzt bearbeitet:
Jo das mit den IDs vorher ermitteln habe ich bereits ausprobiert per PHP. Aber das Problem ist dann eben noch, dass ich auch wenn ich die Genres festlege drei Einzelabfragen brauche, um wirklich für jedes Genre einen Zufallsartikel zu haben.

Da kann ich dann noch besser den Array überprüfen, ob die ID bereits vorhanden ist. Geht auch, ist aber, wie ich finde, keine schöne Lösung, wenn auch besser als drei Einzelabfragen.

Es muss doch möglich sein das in einem Query zu bekommen? Ich hatte s mal mit MAX CONCAT versucht, aber das Ergebnis war auch nicht so wirklich zufriedenstellend. hm...
 
Zuletzt bearbeitet:
Zurück