[MySQL] Zufälliger Wert aus sortierter Menge

Sturmrider

Erfahrenes Mitglied
Guten Abend :)

Ich möchte gerne aus einer sortierten Menge einen zufälligen Wert ermitteln. Nach dem SQL-Standard wäre es in etwa dieser Ausdruck:
Code:
SELECT name FROM xy WHERE (id = IN (SELECT DISTINCT id FROM xy ORDER BY hits DESC LIMIT 10)) ORDER BY RAND() LIMIT 1
Kann mir jemand sagen, warum es in MySQL so nicht funktioniert?

Es soll ein zufälliger Datenbankeintrag ausgegeben werden, welcher einer der 10 Zeilen ist, die die meisten Klicks hat. (ich weiß, dass man das ganz einfach in zwei PHP-Queryabfragen lösen könnte, doch es geht mir ums Prinzip ;) Ich würde gerne verstehen, warum das so in MySQL nicht funktioniert bzw. wie man es da besser machen kann.)
 
Hi

Du hast in der Where-Bedingung 2 Operatoren hintereinander gesetzt = und in
Dies sollte eigentlich einen Fehler erzeugen.

Versuch mal .. where id in (..)

Also in meiner MySQL Verion funktioniert das auch nicht, sie ist allerdings auch schon veraltet.

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Ob es in neueren Version supportet wird, weiß ich nicht.

Alternativ kannst du es ja mal mit einen join probieren

(Beispiel von mir)

SELECT a.kursid
FROM seminar AS a
INNER JOIN (

SELECT kursid
FROM seminar
ORDER BY kursid DESC
LIMIT 5
) AS b ON a.kursid = b.kursid
ORDER BY RAND( )
LIMIT 1
 
Hi :)

Danke für deine Antwort! Ich hatte mich auch schon über die zwei Operatoren gewundert. Ich habe diese Schreibweise von einer Internetseite übernommen, da es nur mit IN nicht funktionierte... Leider tut es das auch immer noch nicht (auch nicht mit anderer Klammer-Schreibweise). Des weiteren habe ich mal Null ausgeschlossen, da dieser Wert ja in jeder Menge vorhanden ist und zumindest laut dem Standard dieser beim IN Operator nicht vorhanden sein darf.
Aber auch dies klappt nicht. Ich verwende übrigens die aktuelle MySQL-Server-Version.

Dein Beispiel mit dem INNER JOIN ist wirklich gut! ;) Da hast du ganz schön um die Ecke gedacht ^^ darauf bin ich gar nicht mehr gekommen... Das funktioniert einwandfrei!
Aber warum das mit dem IN-Operator nicht funktioniert, würde mich trotzdem noch interessieren... (in PostgreSQL klappt das ohne Probleme)
 
Hallo

ich denke, das liegt weniger am in-Operator als am limit.

Ich bin kein mysql Profi, ich arbeite überwiegend mit mssql. Dort funktioniert eine begrenzte Abfrage im Subselect auch.

Für manche Abfragen, wenn sie nicht funktionieren, gibt es auch keine Antworten, sie funktionieren einfach nicht. Die Meldung, die Mysql wiedergibt ist ja eindeutig.
 

Neue Beiträge

Zurück