【问题标题】:Select random with limit not always working选择随机限制并不总是有效
【发布时间】:2013-01-26 16:19:55
【问题描述】:

我从这个站点的一些帖子中得到了这个 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

答案是这个数组:Array([0] => After Sex,[1] => New Moon) 本来应该是四个的元素只有两个。

我在我的电影网站 (http://www.crosstastemovies.com) 的测验部分使用它。数据库表有大约 1823 部电影。 有人可以解释一下吗?

谢谢

【问题讨论】:

    标签: php mysql select random distinct


    【解决方案1】:

    它没有返回正确的数字,因为没有足够的行。当rand() 返回一个非常接近 1 的值时,id2 的值非常接近最大值。满足where 子句的行数不足,因此返回所有可用行。

    【讨论】:

    • 感谢您的回复。有没有其他方法可以返回我想要的行数?如果 RAND 返回的值非常接近 1,可能会更改 RAND() 或 id2?...
    • 我最终验证了创建的阵列。如果值的数量小于限制,我会再次调用它。不是理想的,但有效。
    猜你喜欢
    • 2011-03-03
    • 2013-07-19
    • 2011-02-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2012-09-17
    • 2011-11-22
    • 2014-05-12
    相关资源
    最近更新 更多