php - 随机 MySQL 查询?或者随机化一个结果?

标签 php mysql random

因此,我想对 MySQL 数据库进行查询,但是,我希望结果是随机的 - 也就是说,我不希望每次都以相同的顺序出现相同的结果。这是因为我只会列出查询的前 6 项(或 2 项,在某些情况下),并且我希望数据库的所有内容都有机会出现。

是否可以在 MySQL 中执行此操作,还是我必须使用 PHP 来执行此操作?

最佳答案

要获得快速方法,请尝试以下方法:

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 10
        FROM    t_random
        ) vars
STRAIGHT_JOIN
        (
        SELECT  r.*,
                @lim := @lim - 1
        FROM    t_random r
        WHERE   (@cnt := @cnt - 1)
                AND RAND(20090301) < @lim / @cnt
        ) i

有关其工作原理的详细说明,请参阅这篇文章:


更简单(但速度较慢)的方法是使用 ORDER BY RAND():

 SELECT *
 FROM yourtable
 ORDER BY RAND()
 LIMIT 6

来自 the manual :

... you can retrieve rows in random order like this:

mysql> SELECT * FROM tbl_name ORDER BY RAND();

ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows:

mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d
    -> ORDER BY RAND() LIMIT 1000;

RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers on demand that is portable between platforms for the same MySQL version.


如果您有一个唯一的 id 字段,它从 1 递增到 n 没有任何间隙,您可以通过在 [1, n] 中选择六个随机数并使用那些身份证。这避免了扫描整个表格。

关于php - 随机 MySQL 查询?或者随机化一个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315096/

相关文章:

php - 尝试从 toran 获取所需的私有(private)库时 Composer 警告

php - 插入时 CodeIgniter 和 undefined variable

VB.NET - 从随机数生成器中删除数字

python - 在python中生成超出范围的随机数

php - 将表情符号转换为十六进制代码

php - php中的权限分配

mysql - 执行 SQL 查询,然后使用 OUTFILE 生成动态文件名

C++线程数据库类内存混合

c++ - 什么加密随机生成器 C 代码可以在 WP8.1 上使用?

php - 检查二维数组的 PHP 数组键