我有这张table:
我想在条件为published和具有不同位置值的情况下得到两个随机行(例如:如果第一行是垂直的,那么第二行必须是水平的)。
我试过了
SELECT * FROM publicity where published = 1 and location = 'vertical'
UNION
SELECT * FROM publicity where published = 1 and location = 'horizontal'
ORDER BY rand() LIMIT 2
它有时会给我两行相同的位置值。
1条答案
按热度按时间w6mmgewl1#
您的要求要求从两组不同的项目中随机抽取项目。你打过的电话
horizontal
另一个呢vertical
. 所以,你必须得到这两个随机项,然后取它们的并集。如果你申请
ORDER BY RAND() LIMIT 1
对整个结果集的操作您可以从一个位置获取两个项。这两个查询包含在
SELECT * FROM (SELECT ... ) a
因为mysql想申请ORDER
以及LIMIT
工会通过后的条款。。为什么?
UNION ALL
? 因为UNION
重复数据消除的结果集,你不需要这样做。专业提示:
ORDER BY RAND() LIMIT 1
工作正常,但它是出了名的慢,尤其是在大table上。