是否可以通过他们的位置获得4个字段,但是随机ID?

时间:2014-10-06 08:39:39

标签: mysql random

如果有人可以帮我这个。我试图通过位置从mysql表中获取4个随机字段,问题是我需要总共有4种类型而且它们在这里是随机的是一个sql http://sqlfiddle.com/#!2/2c76f/1

所以结果应该总是位置1,2,3,4但是随机id,是否可以使用一个查询执行此操作,或者我必须有任何类型的4个传送?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

由于您无法在ORDER BY的同一查询中有效使用GROUP BY子句(这意味着您无法在对记录进行分组之前对其进行排序),您可以执行以下操作(here是小提琴):

SELECT * FROM (
    SELECT * FROM banners ORDER BY RAND() // shuffle the records
) AS banners GROUP BY position ORDER BY position // group and order them by position

这样做的好处是您不必对可用位置进行硬编码。如果您决定添加另一个职位(5,6等),这仍然有效。否则,@ Ronak Shah的UNION解决方案更简单,更高效。

答案 1 :(得分:1)

尝试以下:

select * from (SELECT * FROM (`banners`) WHERE `published` =1  ORDER BY RAND() LIMIT 1) A
    Union ALL
select * from (SELECT * FROM (`banners`) WHERE `published` =2  ORDER BY RAND() LIMIT 1) B
    Union ALL
select * from (SELECT * FROM (`banners`) WHERE `published` =3  ORDER BY RAND() LIMIT 1) C
    Union ALL
select * from (SELECT * FROM (`banners`) WHERE `published` =4  ORDER BY RAND() LIMIT 1) D

答案 2 :(得分:1)

这样做。测试

http://sqlfiddle.com/#!2/392d3/11

  SELECT * FROM (
    SELECT * FROM banners WHERE position IN(1,2,3,4) ORDER BY RAND()
  ) AS banners GROUP BY position ORDER BY position;

您可以省略WHERE子句以使用每个可用位置。