如果有人可以帮我这个。我试图通过位置从mysql表中获取4个随机字段,问题是我需要总共有4种类型而且它们在这里是随机的是一个sql http://sqlfiddle.com/#!2/2c76f/1
所以结果应该总是位置1,2,3,4但是随机id,是否可以使用一个查询执行此操作,或者我必须有任何类型的4个传送?
提前谢谢。
答案 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
子句以使用每个可用位置。