[MySQL5] ORDER MY RAND()
am 07.02.2007 13:49:18 von Lars Uhlmann
Ich hab folgende Abfrage mit einem sub select:
SELECT
u.name,
l.guid,
h.score
FROM
u, l, h
WHERE
h.fk_id_u=u.id
AND
h.fk_id_l=l.id
AND
l.id=(SELECT
id
FROM
l
ORDER BY RAND() LIMIT 1);
Dabei kann 'l.id'(int) momentan die Werte 1 bis 3 annehmen, für jede
dieser IDs liefert das obige Konstrukt definitiv mind. einen Datensatz.
Trotzdem bekomme ich mit diese Abfrage sehr häufig ein leeres Ergebnis.
Setze ich statt dem sub select dort 1 bis 3 drei ein, kommen meine
gewünschten Datensätze. Genauso liefert das sub select allein immer
richtig 1 bis 3. Wo liegt das Fehler?
Danke
Lars
Re: [MySQL5] ORDER BY RAND()
am 07.02.2007 15:11:45 von Lars Uhlmann
Lars Uhlmann schrieb:
> Ich hab folgende Abfrage mit einem sub select:
>
> SELECT
> u.name,
> l.guid,
> h.score
> FROM
> u, l, h
> WHERE
> h.fk_id_u=u.id
> AND
> h.fk_id_l=l.id
> AND
> l.id=(SELECT
> id
> FROM
> l
> ORDER BY RAND() LIMIT 1);
Das Ziel dieser Abfrage ist folgendes:
Es gibt eine Tabelle USER (u), LEVEL (l) und HIGHSCORE (h). In HIGHSCORE
wird über FKs die Beziehung zw, USER und LEVEL und dem zugehörigen
Score-Wert hergestellt. Ich will nun per Zufall einen Level auswählen
und von diesem die X besten anzeigen.
Unter [0] steht folgender Hinweis:
"ORDER BY RAND() combined with LIMIT is useful for selecting
a random sample from a set of rows:
[...]
Note that RAND() in a WHERE clause is re-evaluated every time
the WHERE is executed."
Das ist sicher die Ursache, weil sich 'l.id' Zeile für Zeile ändert.
Kann ich das trotzdem irgendwie in einer Abfrage lösen?
Danke
Lars
[0] http://dev.mysql.com/doc/refman/5.0/en/mathematical-function s.html