0

このサイトのいくつかの投稿からこのmysqlselectを取得し、99%の確率でうまく機能しますが、要求したランダム要素の数が返されないことがあり、その理由がわかりません。失敗した最近の例を次に示します。

SELECT DISTINCT movie_title
FROM movies AS r1 JOIN
     (SELECT (RAND() * (SELECT MAX(movie_id) FROM movies)) AS id2
    ) AS r2
WHERE r1.movie_id >= r2.id2 AND movie_title != "New Moon"
ORDER BY r1.movie_id ASC LIMIT 4

答えはこの配列でした:Array([0] => After Sex、[1] => New Moon)4つであるはずの2つの要素だけ。

私はこれを私の映画サイト(http://www.crosstastemovies.com)のクイズセクションで使用しています。データベーステーブルには約1823本の映画があります。誰かがこれに光を当ててくれませんか?

ありがとう

4

1 に答える 1

1

十分な行がないため、正しい番号が返されていません。rand()1に非常に近い値を返す場合、の値id2は最大値に非常に近くなります。句を満たすのに十分な行がないwhereため、使用可能なすべての行が返されます。

于 2013-02-11T14:41:55.183 に答える