MySQL从两个连接表中选择一个随机行

时间:2012-01-31 12:49:54

标签: mysql sql

我知道有一些类似的问题,但这是我在快速随机选择行上的实现:

SELECT i.id, i.thumb_img, i.af, i.width, i.height
FROM images_detail id
JOIN images AS i ON id.imageid = i.id
WHERE id.imageid >=1
AND id.newsroom =1
AND i.width > i.height
AND id.imageid >= FLOOR( 1 + RAND( ) *23111593 )
LIMIT 1 

这个查询的问题是id.imageid >= FLOOR( 1 + RAND( ) *23111593 )中的RANDOM表达式无关紧要,它总是返回相同的ID,为什么? 有什么帮助吗?

稍后编辑:

查询需要0.0005秒,使用EXPLAIN,报告返回USING WHERE并返回12993 ROWS

Id是自动递增的,它不是23111593,因为RAND()返回0.xxxxx所以RAND()* 23111593,返回大约12993行。问题是,相同的ID位于顶部,我不想调用ORDER BY子句。

3 个答案:

答案 0 :(得分:1)

http://www.greggdev.com/web/articles.php?id=6

或使用

ORDER BY RAND()LIMIT 0,1;

答案 1 :(得分:0)

您的数据库中是否有任何“imageid”大于您定义的范围(1< = X< = 23111593)?

数据库中可能只有一个条目。

(另外,请记住,您可能只有一个实际符合id.newsroom = 1,i.width> i.height等的查询。)

答案 2 :(得分:0)

最后我将所有结果加载到数组中,将其存储在缓存中并使用PHP $key=rand(0,sizeof(array))生成,然后按如下方式使用array[$key]['property']