我有以下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"
');
答案 0 :(得分:3)
$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()
');
你可以使用MySQL的RAND
函数来做到这一点,要注意它在巨大的数据集上执行得非常慢(〜大约10k)。 MySQL会为表格的每一行提取一个随机数,如果表格很大,可能会导致问题。
更安全的方法是执行SELECT count(*) as n FROM table
并拾取随机数并使用LIMIT 1,n
进行查询以拾取第n行。如果您只需要1,那么这将起作用,或者您不关心结果是否相同。
如果你真的需要一个完整的随机设置,在我看来更好地在服务器端做。
答案 1 :(得分:0)
你可以尝试
ORDER BY RAND()
答案 2 :(得分:0)
最简单的方法是使用ORDER BY RAND()
,但它的性能很糟糕,特别是对于较大的数据集(需要所有匹配行的随机数)。
另一种方法是随机创建id(在您的代码中或再次使用RAND():WHERE id in (RAND(), RAND(), RAND(), RAND())
应该可以工作,但不能保证)。一旦某些ID不存在,这就会出现问题。