2013-02-11 51 views
0

我得到了這個mysql選擇從這裏的一些帖子在這個網站,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 

答案是這樣的陣列:陣列([0] =>性愛後,[1] =>朔) 只有兩個元素,但是應該已有4。

我在我的電影網站(http://www.crosstastemovies.com)的測驗部分使用了該功能。數據庫表大約有1823部電影。 有人可以請說明這一點嗎?

謝謝

回答

1

它沒有返回正確的數字,因爲沒有足夠的行。當rand()返回非常接近1的值時,id2的值非常接近最大值。沒有足夠的行滿足where子句,因此返回所有可用的行。

+0

感謝您的回覆。有沒有其他方法可以返回我想要的行數? 如果RAND返回的值非常接近1,那麼可能更改RAND()或id2?... – 2013-02-11 16:03:37

+0

我最終驗證了創建的數組。如果值的數量少於限制,我只需再次調用它。不是理想的,但工作。 – 2013-02-20 13:05:49