mysql:随机获取两个不同值的行

xggvc2p6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(437)

我有这张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

它有时会给我两行相同的位置值。

w6mmgewl

w6mmgewl1#

您的要求要求从两组不同的项目中随机抽取项目。你打过的电话 horizontal 另一个呢 vertical . 所以,你必须得到这两个随机项,然后取它们的并集。

SELECT * FROM (SELECT whatever FROM table WHERE location='horiz' ORDER BY RAND() LIMIT 1) h
UNION ALL
SELECT * FROM (SELECT whatever FROM table WHERE location='vert' ORDER BY RAND() LIMIT 1) v

如果你申请 ORDER BY RAND() LIMIT 1 对整个结果集的操作您可以从一个位置获取两个项。
这两个查询包含在 SELECT * FROM (SELECT ... ) a 因为mysql想申请 ORDER 以及 LIMIT 工会通过后的条款。。
为什么? UNION ALL ? 因为 UNION 重复数据消除的结果集,你不需要这样做。
专业提示: ORDER BY RAND() LIMIT 1 工作正常,但它是出了名的慢,尤其是在大table上。

相关问题