请教大家关于mysql的order By Rand()问题

Jim@luckeeinc.com 2011-02-25 11:17:01
我查询的结果有170万比 数据
是几个表关联出来的 关联出来后随即取里面的10笔 我用order By Rand() limit 10 效率很低
请教各位 是否有别的写法 谢谢
...全文
161 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
life169 2011-02-25
  • 打赏
  • 举报
回复
如果 查询出来的集合有一个字段是连续的就好办了

select max(xx) as xx,min(yy) as yy........

然后$arr = rand(yy,xx);

然后 再select ...... where xxid id implode($arr)
Jim@luckeeinc.com 2011-02-25
  • 打赏
  • 举报
回复
这个我看过 不过他是对单表操作的

如果我是几个表关联后用的 order by rand()
比如

select A.a1, A.a2, A.a3, B.b1, B.b2, C.c1
from A
left join B on....
left join C on....
where ....
order by rand() limit 10

这个怎么写?
junchen168168 2011-02-25
  • 打赏
  • 举报
回复
[1]普通方法, 效率太低

SELECT * FROM table ORDER BY rand() LIMIT 10;

[2] JOIN的方法:

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`) – (SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 10;

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧