相关疑难解决方法(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中的大表中快速选择随机行

从大型mysql表中选择随机行的快速方法是什么?

我在php工作,但我对任何解决方案感兴趣,即使它是用另一种语言.

mysql sql random select

45
推荐指数
4
解决办法
3万
查看次数

从mysql表中快速选择随机ID,包含数百万条非连续记录

我环顾四周,似乎没有任何简单的方法来做到这一点.几乎看起来只是抓住一部分记录并在代码中进行所有随机化(perl)更容易.我在网上看到的方法看起来更像是数十万,但肯定不是数百万.

我正在使用的表有600万条记录(并且正在增长),ID会自动递增,但并不总是存储在表中(非无间隙).

我已经尝试过推荐的LIMIT 1查询,但查询需要永远运行 - 考虑到记录中存在空白,有没有快速的方法来执行此操作?我不能只采取最大值并随机化范围.

更新:

我的一个想法可能是获取最大值,根据最大值随机化一个限制,然后从random_limit_1到random_limit_2获取10个记录的范围,然后获取在该范围内找到的第一个记录.

或者,如果我知道最大值,有没有办法我可以选择说出表的第5条记录,而不必知道它是哪个ID.然后抓住该记录的id.

更新:

这个查询有点快 - ish.仍然不够快= /

SELECT t.id FROM table t JOIN (SELECT(FLOOR(max(id) * rand())) as maxid FROM table) as tt on t.id >= tt.maxid LIMIT 1
Run Code Online (Sandbox Code Playgroud)

mysql random recordset

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

从mysql数据库返回随机行而不使用rand()

我希望能够从数据库中提取15个左右的记录.我已经看到WHERE id = rand()随着数据库变大,使用会导致性能问题.我见过的所有解决方案都是为了选择单个随机记录.我想得到倍数.

有谁知道为大型数据库执行此操作的有效方法?

编辑:

进一步编辑和测试:

我在使用MyISAM的新数据库上创建了一个相当简单的表.我给了这3个字段:( autokey无符号自动数字键)bigdata(大blob)和somemore(中等int).然后我将随机数据应用到表中并使用Navicat运行一系列查询.结果如下:

Query 1: select * from test order by rand() limit 15

 Query 2: select * 
          from 
      test 
          join 
      (select round(rand()*(select max(autokey) from test)) as val from test limit 15)                                           as rnd
      on 
          rnd.val=test.autokey;`
Run Code Online (Sandbox Code Playgroud)

(我尝试了选择和选择不同,它没有明显的区别)

和:

Query 3 (I only ran this on the second test):
SELECT  *
    FROM    (
    SELECT  @cnt := COUNT(*) + 1,
            @lim := 10
    FROM    test
    ) vars
    STRAIGHT_JOIN …
Run Code Online (Sandbox Code Playgroud)

php mysql random

3
推荐指数
1
解决办法
3188
查看次数

MySQL的.随机行.将行转换为PHP数组.

我有一个包含四列的MySQL表submited_name, submited_URL, submited_type, uniqueID.在这张表中我有大约1000条记录.我需要选择10个随机条目.问题是我需要将选定的随机值拆分为单独的PHP数组.每列一个.我的数组看起来像这样:

$ten_random_names = array ('name26', 'name55', 'name107', ect.);
$ten_random_URL = array ('url for name26', 'url for name55', 'url for name107', ect..);
$ten_random_types = array ('type for name26', 'type for name55', 'type for name107', ect..);
Run Code Online (Sandbox Code Playgroud)

php mysql

1
推荐指数
1
解决办法
1025
查看次数

标签 统计

mysql ×5

random ×4

php ×2

sql ×2

recordset ×1

select ×1

sql-order-by ×1