2009-04-29 6 views
0

ich den folgenden Code ausgeführt wird aus einem Wörterbuch einen zufälligen Eintrag zu erhalten:Auswahl zufälligen Eintrag in MySQL mit WHERE-Klausel Problem

SELECT * FROM tbl_dict WHERE 1 ORDER BY RAND() LIMIT 1 

Dies funktioniert gut, aber sobald ich dort erweitern WHERE-Klausel der Abfrage schlägt fehl. Was ich brauche, ist etwas wie ...

SELECT * FROM tbl_dict WHERE 1 and lock='0' ORDER BY RAND() LIMIT 1 

Kann jemand mich darauf hinweisen, wo ich falsch liege? Meine Gedanken sind zu Erdnussbutter geworden.

Vielen Dank!

+0

Was passiert, wenn Sie nur tun SELECT * FROM tbl_dict WHERE lock = '0' ORDER BY RAND() LIMIT 1 –

+2

Wie schlägt es fehl? erhalten Sie einen Fehler, ein erosives Ergebnis? –

+0

Hallo Schlitten, wenn ich diese Abfrage ausführen, werden keine Daten herausgezogen. Die Daten werden von PHP ausgelesen und als XML an eine Flash-Datei gesendet. Aus irgendeinem Grund scheint die Abfrage von der '1' abhängig zu sein, die ich entferne und nicht erweitern kann:/ – Aaron

Antwort

5

Sperre ein reserved word für MySQL ist. Sie müssen es in Backticks (`) oder Anführungszeichen (im Ansi-Modus) setzen, wenn Sie es als Bezeichner verwenden möchten.

Sie könnten auch interessiert sein an http://jan.kneschke.de/projects/mysql/order-by-rand.
ORDER BY Rand() ist vielleicht in Ihrem Fall etwas zu suboptimal, wenn es um Geschwindigkeit geht.

+0

Danke! Ich war in einer solchen Eile Prototyping das war mir völlig vergessen, danke nochmal. – Aaron

0

Es macht nichts, das ist falsch für das, was Sie versuchen zu tun.

Sie haben eine synthetische auto_incrementierte ID-Spalte auf Ihrem Tisch, richtig?

wenn ja, warum dann nicht:

select * from tbl_dict where id 
    = (select floor(rand() * (max(b.id) + 1)) from tabl_dict b); 
+0

Danke! Ich werde diesen Code für die Produktionsversion beiseite legen. – Aaron