2009-04-29 17 views
0

私は辞書からランダムなエントリを取得するには、次のコードを実行している:でMySQLにランダムなエントリを選択するWHERE句の問題

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

これは素晴らしい作品を、しかし、すぐに私はWHERE句のクエリが拡大して失敗する。私が必要とするものは、次のようなものです。

私が間違っているところを誰かが指摘できますか?私の心はピーナッツバターに変わった。

ありがとうございました!

+0

ちょうどしたときに何が起こるか SELECT * FROM tbl_dict WHERE lock = '0' ORDER BY RAND()LIMIT 1 –

+2

どうして失敗するのですか?あなたは間違った結果を得るのですか? –

+0

こんにちはSledge、私はそのクエリを実行すると、データが引き出されません。データはPHPによって引き出され、XMLとしてFlashファイルに送られます。なんらかの理由で、クエリは '1'に依存して表示されますが、削除することはできません:/ – Aaron

答えて

5

ロックはMySQLのreserved wordです。識別子として使用する場合は、バッククォート( `)または二重引用符(ansiモード)で指定する必要があります。

http://jan.kneschke.de/projects/mysql/order-by-randに興味があります。
ORDER BY Rand()はスピードの点で、あなたのケースではあまりにも最適ではないかもしれません。

+0

ありがとう!私はこのような急いでプロトタイプをしていたので、私の心が完全に崩れてしまった。もう一度感謝している。 – Aaron

0

あなたのやりたいことは間違いありません。

テーブルに合成auto_incremented id列があります。

もしそうなら、なぜない:

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

ありがとう!私はこのバージョンをプロダクション版のために残しておきます。 – Aaron

関連する問題