2012-01-31 133 views
0

我知道有simmilar问题在那里,但here`s在快速随机选择行我的实现:的MySQL选择一个随机行从两个连接表

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 WHERE12993 ROWS回到

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

+0

如果您取消where子句的限制和RAND部分,会返回多少个结果? – malonso 2012-01-31 12:54:00

+0

@malonso我编辑了我的文章以包含更多细节。谢谢! – Gabriel 2012-01-31 13:06:05

+0

imageid的分布情况如何?也许所有的图像都有ID> 23111593? – bububaba 2012-01-31 13:15:47

回答

0

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

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

(也,请记住,你可能只有一个,实际上适合id.newsroom = 1,i.width的查询> i.height等)

+0

有12000符合WHERE条件 – Gabriel 2012-01-31 13:01:41

0

最后,我已经加载的所有结果在一个数组中,将其存储在缓存中,并使用PHP $key=rand(0,sizeof(array))制作,然后如下使用它:array[$key]['property']

相关问题