MySql:获取两个具有不同值的随机行

时间:2018-09-25 11:06:10

标签: php mysql random phpmyadmin

我有这张桌子:

enter image description here

我想在发布的情况下获得2条随机行,并且具有不同的位置值(例如:如果第一行是垂直行,第二行必须是水平行)。

我尝试过

  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 个答案:

答案 0 :(得分:0)

您的要求要求从两组不同的项目中随机抽取项目。您呼叫了一个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希望在合并后应用ORDERLIMIT子句。

为什么UNION ALL?因为UNION对结果集进行了重复数据删除,所以您不需要这样做。

专业提示ORDER BY RAND() LIMIT 1可以正常运行,但是众所周知,它运行缓慢,特别是在大桌子上。