我知道有一些类似的问题,但这是我在快速随机选择行上的实现:
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子句。
答案 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']