mysql - 如何随机排序数据

标签 mysql random

我有以下 MySQL。我想以随机顺序拉取数据。

谁能教我怎么做。

$Q = $this->db->query('SELECT P.*, C.Name AS CatName
               FROM products AS P
               LEFT JOIN categories C
               ON C.id = P.category_id
               WHERE C.Name = "Front bottom"
               AND p.status = "active"
               ');

最佳答案

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
                   FROM products AS P
                   LEFT JOIN categories C
                   ON C.id = P.category_id
                   WHERE C.Name = "Front bottom"
                   AND p.status = "active"
                   ORDER BY RAND()
                   ');

您可以使用 RAND MySQL 的功能来做到这一点,需要注意的是它在巨大的数据集(~ 大约 10k)上执行得非常慢。 MySQL 会为表的每一行选取一个随机数,如果表很大,这可能会导致问题。

一个更安全的方法是执行 SELECT count(*) as n FROM table 并选择一个随机数并使用 LIMIT 1,n 进行查询以拾取第 n 行。如果您只需要 1 个,或者您不关心以相同顺序获得结果,那将起作用。

在我看来,如果你真的需要一个完整的随机集,最好在服务器端完成。

关于mysql - 如何随机排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851610/

相关文章:

c++ - 在 C++11 中的类中的不同方法之间共享 random_number_engine

php - 如何在使用 mysqldump 获取的 mysql 备份(.sql 文件)中转义单引号和双引号

mysql - 使用 Doctrine 1.2 和 Zend Framework 设置 MySQL session 变量 - 时区

haskell - 如何在常量内存中获取 make stats

c - 是否可以使用 math.h 的 rand() 生成包括次正规数的随机 float ?

c - 用c生成20个随机数

java - 来自服务器的错误 : Data source rejected establishment of connection, 消息: "Too many connections"

mysql - MYSQL 中的规范化

mysql - 错误未知列 'Extent1.id' in 'where clause' 在 mysql 和 EF6 列表的位置

java - 为什么当我将它们放入数组时,我生成的随机值是相同的?