相关疑难解决方法(0)

MySQL:ORDER BY RAND的替代品()

我已经阅读了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)

mysql sql random sql-order-by

58
推荐指数
3
解决办法
8万
查看次数

在MySQL中选择随机行

我正在开发一个测验网站,我有一个存储所有问题的数据库.有不同类型的测验,如数学,科学,历史等.所有问题都存储在一个表中.

我的问题表看起来像这样:

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 sql

13
推荐指数
1
解决办法
2万
查看次数

从MySQL中的表中选择随机行的最佳方法是什么?

可能重复:
从mysql中的大表中快速选择随机行

我已经看到使用这样的查询拉取随机行,这对于大型数据集来说效率很低.

SELECT id FROM table ORDER BY RANDOM() LIMIT 1
Run Code Online (Sandbox Code Playgroud)

我还看到了其他各种与MySQL无关的RDBMS特定解决方案.

我能想到的最好的事情就是使用两个查询并执行类似的操作.

  1. 获取表中的行数.MyISAM表存储行数,因此速度非常快.
  2. 计算0和rowcount - 1之间的随机数.
  3. 选择按主键排序的行,使用LIMIT randnum,1

这是SQL:

SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的主意?

mysql random

9
推荐指数
0
解决办法
1873
查看次数

标签 统计

mysql ×3

random ×2

sql ×2

sql-order-by ×1