我希望在查询后有随机化的行,但是使用order by rand()
只会耗尽一个有120k +行的表。我找到了一个只输出行数的小解决方案,但它从一个随机索引开始运行,然后返回#number of rows。它非常快,但只是在随机索引后返回一些行。代码如下:
SELECT *
FROM lieky AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(col_0)
FROM lieky)) AS id)
AS r2
WHERE r1.col_0 >= r2.id
ORDER BY r1.col_0 ASC
LIMIT 100
我在这里找到了它:http://jan.kneschke.de/projects/mysql/order-by-rand/
有什么东西可以帮助我吗?
我试图将随机数据分成分页,因此当用户查询数据库时,他将始终以随机顺序获取行。 谢谢你的帮助。
答案 0 :(得分:1)
应该注意
(SELECT (RAND() * (SELECT MAX(col_0) FROM lieky)) AS id)
可以返回MAX(col_0),所以你只得到1行(因为WHERE r1.col_0> = r2.id)
我认为好的解决方案应该是:
indexName
(groupId,seed)关于recalc脚本,它会相当慢(所以晚上运行它是个好主意) 您可以使用以下方式更新种子:
update lieky set Seed = rand()*1000000
然后为前N行设置GroupId = 0,为后续N行设置GroupId = 1,...
N是您可以为用户显示的最大行数(max_page)*(per_page_count)