因此,我想对 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/