2009-04-29 6 views
0

J'exécutant le code suivant pour obtenir une entrée au hasard dans un dictionnaire:Sélection entrée aléatoire dans MySQL avec WHERE problème de la clause

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

Cela fonctionne très bien, mais dès que j'étendre là où la clause de la requête échoue. Ce que je besoin est quelque chose comme ...

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

Quelqu'un peut-il me indiquer où je vais mal? Mon esprit s'est tourné vers le beurre de cacahuète.

Merci!

+0

Que se passe-t-il lorsque vous venez de le faire SELECT * FROM tbl_dict WHERE lock = '0' ORDRE PAR RAND() LIMIT 1 –

+2

Comment est-ce que cela échoue? avez-vous une erreur, un résultat erratique? –

+0

Salut Sledge, lorsque j'effectue cette requête aucune donnée n'est retirée. Les données sont extraites par PHP, puis envoyées en XML dans un fichier Flash. Pour une raison quelconque, la requête semble dépendante du '1' que je supprime et ne peut pas augmenter:/ – Aaron

Répondre

5

serrure est un reserved word pour MySQL. Vous devez le mettre en backticks (`) ou en double-quotes (en mode ansi) si vous voulez l'utiliser comme identifiant. Vous pouvez également être intéressé par http://jan.kneschke.de/projects/mysql/order-by-rand.
ORDER BY Rand() peut être ou ne pas être un peu trop sous-optimal dans votre cas quand il s'agit de la vitesse.

+0

Merci! J'étais dans un tel prototypage précipité que cela avait complètement glissé dans mon esprit, merci encore. – Aaron

0

Peu importe, c'est faux pour ce que vous essayez de faire.

Vous avez une colonne auto_incremented synthétique sur votre table, n'est-ce pas?

si oui, alors pourquoi ne pas:

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

Merci! Je garderai ce code de côté pour la version de production. – Aaron

Questions connexes