【问题标题】:MySQL choose a random row from two joined tablesMySQL 从两个连接表中选择一个随机行
【发布时间】:2012-01-31 12:49:53
【问题描述】:

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

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 子句。

【问题讨论】:

  • 去掉 where 子句的限制和 RAND 部分返回多少个结果?
  • @malonso 我已经编辑了我的帖子以包含更多详细信息。谢谢!
  • imageid的分布情况如何?也许所有图像的 id > 23111593?
  • @bububaba Ids are auto-incremented, its 不是 23111593,因为 RAND() 返回 0.xxxxx 所以 RAND()*23111593,返回大约 12993 行。问题是,相同的 ID 在顶部,我不想调用 ORDER BY 子句。

标签: mysql sql


【解决方案1】:

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

或使用

ORDER BY RAND() LIMIT 0,1;

【讨论】:

  • 非常慢,尤其是关于数百万行:P 使用 EXPLAIN 它声明使用临时,使用文件排序...坏
【解决方案2】:

您的数据库中是否有任何“imageid”大于您定义的跨度 (1

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

(另外,请记住,您可能只有一个真正适合 id.newsroom = 1、i.width>i.height 等查询的内容)

【讨论】:

  • 符合上述 WHERE 条件的有 12000 个
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多