0

名前が含まれるMySQLテーブルがあります。パフォーマンスに大きな影響を与えることなく、テーブルからランダムな順序で名前のランダムなリストを取得しようとしています。これを行うクエリを見つけて実装しましたが、1 つの欠陥があります...データベースに 10 個の名前があり、クエリを使用して 2 つのランダムな名前を要求するとします。いつもは2枚返ってくるのですが、1枚しか返ってこない時もあります。もちろん、9人の名前を返すように頼むと、これはさらに悪化します。5、次に 8、次に 9、そして 2 を取得します。これはスクリプトがランダムな ID を選択し、そこから上に行くことに関係していると思います。問題は、正確に毎回要求する名前の数 (データベースに十分な名前が含まれていない場合を除きます。その場合、すべての名前がランダムな順序で返されます。)

私が使用しているクエリは次のとおりです。

SELECT Name 
FROM RandomNames AS r1 
JOIN (
    SELECT (Rand() * (SELECT MAX(ID) FROM RandomNames)) AS ID
) AS r2 
WHERE r1.ID >= r2.ID 
ORDER BY r1.ID AS C 
LIMIT ?
4

1 に答える 1