我已经阅读了MySQL ORDER BY RAND()函数的一些替代方法,但大多数替代方案仅适用于需要单个随机结果的位置.
有没有人知道如何优化返回多个随机结果的查询,例如:
SELECT u.id,
p.photo
FROM users u, profiles p
WHERE p.memberid = u.id
AND p.photo != ''
AND (u.ownership=1 OR u.stamp=1)
ORDER BY RAND()
LIMIT 18
Run Code Online (Sandbox Code Playgroud) 我正在开发一个测验网站,我有一个存储所有问题的数据库.有不同类型的测验,如数学,科学,历史等.所有问题都存储在一个表中.
我的问题表看起来像这样:
questions ( qno(int) ,type(int), question, .... ,... )
Run Code Online (Sandbox Code Playgroud)
qno是主键,type用于跟踪测验类型:
if type = 1 (math)
type = 2(science)
Run Code Online (Sandbox Code Playgroud)
现在,我想为每种类型的测试选择一些随机问题.例如,我可能只想为数学测试选择一些随机的20个问题.
MySQL有某种方法可以选择随机行吗?
可能重复:
从mysql中的大表中快速选择随机行
我已经看到使用这样的查询拉取随机行,这对于大型数据集来说效率很低.
SELECT id FROM table ORDER BY RANDOM() LIMIT 1
Run Code Online (Sandbox Code Playgroud)
我还看到了其他各种与MySQL无关的RDBMS特定解决方案.
我能想到的最好的事情就是使用两个查询并执行类似的操作.
这是SQL:
SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的主意?