随机获取数据库一条数据,带WHERE条件的

不问归期_ 2020-02-17 06:16:45
下面链接是找的资料,到这个没加where查询条件的!https://blog.csdn.net/c_staunch/article/details/84428904 SELECT * FROM table_name as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM table_name))LIMIT 1; 这个语句怎么添加where条件呢,试了很多次都不行
...全文
383 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
不问归期_ 2020-02-23
  • 打赏
  • 举报
回复
引用 2 楼 董旭阳TonyDong 的回复:
效率好的一种办法:
select * from table_name where col1=xxx
and id>=rand()*(SELECT max(id) FROM table_name WHERE col1=xxx) limit 1;
记得查询条件加索引。
谢谢
不问归期_ 2020-02-23
  • 打赏
  • 举报
回复
引用 3 楼 AHUA1001 的回复:
看看这个吧,估计能对您有帮助。
https://blog.csdn.net/AHUA1001/article/details/103126626
谢谢
不问归期_ 2020-02-23
  • 打赏
  • 举报
回复
引用 4 楼 kampoo 的回复:
[quote=引用 楼主 不问归期_ 的回复:] 下面链接是找的资料,到这个没加where查询条件的!https://blog.csdn.net/c_staunch/article/details/84428904 SELECT * FROM table_name as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM table_name))LIMIT 1; 这个语句怎么添加where条件呢,试了很多次都不行
你的脚本采用默认排序,所以每次应该返回了相同的记录。加一个排序即可:
SELECT * FROM table_name as t1 
WHERE t1.id>=(RAND()*(SELECT MAX(id) 
FROM table_name))
ORDER BY t1.id
LIMIT 1;
如果t1.id的顺序不是从1开始的(比如id为自增量,但删除过很多数据,造成id的“空洞”),就要考虑使用id区间随机:
SELECT * FROM table_name as t1 
WHERE t1.id>=(SELECT RAND()*(MAX(id)-MIN(id)) + MIN(id) 
FROM table_name)
ORDER BY t1.id
LIMIT 1;
[/quote]谢谢
kampoo 2020-02-22
  • 打赏
  • 举报
回复
引用 楼主 不问归期_ 的回复:
下面链接是找的资料,到这个没加where查询条件的!https://blog.csdn.net/c_staunch/article/details/84428904 SELECT * FROM table_name as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM table_name))LIMIT 1; 这个语句怎么添加where条件呢,试了很多次都不行
你的脚本采用默认排序,所以每次应该返回了相同的记录。加一个排序即可:
SELECT * FROM table_name as t1 
WHERE t1.id>=(RAND()*(SELECT MAX(id) 
FROM table_name))
ORDER BY t1.id
LIMIT 1;
如果t1.id的顺序不是从1开始的(比如id为自增量,但删除过很多数据,造成id的“空洞”),就要考虑使用id区间随机:
SELECT * FROM table_name as t1 
WHERE t1.id>=(SELECT RAND()*(MAX(id)-MIN(id)) + MIN(id) 
FROM table_name)
ORDER BY t1.id
LIMIT 1;
AHUA1001 2020-02-21
  • 打赏
  • 举报
回复
看看这个吧,估计能对您有帮助。
https://blog.csdn.net/AHUA1001/article/details/103126626
  • 打赏
  • 举报
回复
效率好的一种办法:
select * from table_name where col1=xxx
and id>=rand()*(SELECT max(id) FROM table_name WHERE col1=xxx) limit 1;
记得查询条件加索引。
道玄希言 2020-02-19
  • 打赏
  • 举报
回复
效率差的一种办法: select * from table_name where 条件 order by rand( ) limit 1

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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