需求:
我有一个文章数据库,我想从数据库里随机调出数据,生成一个自定义的云标签。
我想随机从数据库掉出40条记录,star = 5,star = 4,star = 3,star = 2,的各10条。
且每条记录的auther不重复,即40条记录有40个不同的auther。描述:
数据库名: article
数据库表列: id|title|detail|star|date|auther
其中star列,一共有五种,(1,2,3,4,5)。
数据库量70-80万条。原始语句:(SELECT * FROM article WHERE star = `5` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `4` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `3` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `2` ORDER BY RAND() LIMIT 10)
LIMIT 40
问题:
1.如何限制40条记录40个不同的auther?
2.如何对SQL语句进行优化?补充:
ORDER BY RAND()似乎速度很慢,而且总是RAND出数据库里前几条记录来。
我的数据库量有几十万,最好调出记录可以分散型分布。鸣谢:
谢谢大家的帮助。
我有一个文章数据库,我想从数据库里随机调出数据,生成一个自定义的云标签。
我想随机从数据库掉出40条记录,star = 5,star = 4,star = 3,star = 2,的各10条。
且每条记录的auther不重复,即40条记录有40个不同的auther。描述:
数据库名: article
数据库表列: id|title|detail|star|date|auther
其中star列,一共有五种,(1,2,3,4,5)。
数据库量70-80万条。原始语句:(SELECT * FROM article WHERE star = `5` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `4` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `3` ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM article WHERE star = `2` ORDER BY RAND() LIMIT 10)
LIMIT 40
问题:
1.如何限制40条记录40个不同的auther?
2.如何对SQL语句进行优化?补充:
ORDER BY RAND()似乎速度很慢,而且总是RAND出数据库里前几条记录来。
我的数据库量有几十万,最好调出记录可以分散型分布。鸣谢:
谢谢大家的帮助。
解决方案 »
- mysql 外键 设置了级联删除和更新,还是不能插入
- 帮我看下这条sql还有优化的可能吗?
- 如何用arm-linux-gcc编译mysql C啊?
- 几个constraints 的写法
- 一个sql写法问题,请教~~~
- (非常着急)请问IF语句能不能放在where里面
- 弱弱的问:AUTO_INCREMENT类型不能DEFAULT默认值?
- 菜鸟求助: 如何在MySql中增 删 查 用户, 请各位能人能帮小弟一把.
- mysql怎么不能启动?
- sql查询-根据字段类型不同来关联不同表
- mysql计划任务,求助
- mysql任何锁表情况都很慢,锁多个表还出现过提示timeout的情况,偶尔发生,发生时重启数据库也不能解决问题
UNION
(SELECT * FROM article b WHERE star = `4` and article.auther != b.auther RAND(10))
UNION
(SELECT * FROM article c WHERE star = `3` and article.auther != c.auther RAND(10))
UNION
(SELECT * FROM article d WHERE star = `2` and article.auther != d.auther RAND(10))