mysql 获取数据库随机10条数据的问题 【有点难】

yanyezzzzz 2017-03-12 01:24:55
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;

这个语句我要获取的10个数据为什么字段的id都变成一样的了。。求解
...全文
805 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
伟洪winni 2017-03-22
  • 打赏
  • 举报
回复
先生成10个随机id, 通过id查找数据
lamking 2017-03-21
  • 打赏
  • 举报
回复
以前也碰到过类似需求,楼上那些方法都是网上流行的方法,不过都有缺陷,不是性能太差,就是没有考虑 ID 不连续的情况。最后我也没能纯粹用mysql 完成这个,后来采取的是,取出表里记录数,比如1000,之后用程序生成1至1000之间 无重复的10个随机数,之后,将这10个随机数作为 limit 的偏移量 ,例如 limit 10,1 , limit 30,1 。 实际操作中,可以把记录数缓存下来。sql语句可以用union all 拼接,也可以用程序循环处理。测试过,达到要求的情况下,性能还可以。
月小升2016 2017-03-21
  • 打赏
  • 举报
回复
$min 和 $max是你随机出来的差距为20的两个数字 select * from table where id in (select id from table where id > $min and id <$max) limit 10
qq2460857094 2017-03-15
  • 打赏
  • 举报
回复
select *,rand() as r from tbl_name order by r asc limit 10
qq_34921650 2017-03-13
  • 打赏
  • 举报
回复
select * from table_name where id>=((select MAX(id) from table_name)-(select MIN(id) from table_name))*RAND()+(select MIN(id) from table _name) limit 1
yanyezzzzz 2017-03-12
  • 打赏
  • 举报
回复
你那个方法不行 几十万数据你那方法根本不能用
xuzuning 2017-03-12
  • 打赏
  • 举报
回复
select * from tbl_name order by rand() limit 10

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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