我想在4个div中显示随机图像。
在div 1:1中,div_id为0的随机图像。 在div 2:1中随机图像,div_id为1。 在div 3:1随机图像与div_id 2。 在div 4:1中使用div_id 3的随机图像。
我的简化表:
id_img id_div
1 0
2 0
3 0
4 1
5 1
6 2
7 2
8 3
9 3
10 3
例如,结果可以是:
id_img id_div
2 0
4 1
7 2
10 3
以及下一次结果:
id_img id_div
3 0
5 1
6 2
8 3
我认为只有一个SELECT是可能的,我尝试了几个像这样的查询:
SELECT id_div , id_img
FROM img_table
WHERE id_div in ('0' ,'1' , '2' , '3')
GROUP BY id_div
HAVING COUNT(*) = 2
ORDER BY RAND()
但不幸的是,我没有得到我想要的结果。我做错了什么?
答案 0 :(得分:3)
另一种解决方案只使用一个group by
和substring_index()
/ group_concat()
技巧:
SELECT id_div,
substring_index(group_concat(id_img order by rand()), ',', 1) as id_img
FROM img_table
WHERE id_div in ('0', '1' , '2', '3')
GROUP BY id_div
HAVING COUNT(*) = 2;
答案 1 :(得分:0)
你可以使用相关的子查询方法和rand()的顺序,以便每个div获得一个随机的图像
SELECT i.id_div ,
(SELECT id_img FROM img_table WHERE id_div=i.id_div ORDER BY RAND() LIMIT 1) AS id_img
FROM img_table i
WHERE i.id_div in ('0' ,'1' , '2' , '3')
GROUP BY i.id_div
HAVING COUNT(*) >= 2
答案 2 :(得分:0)
有趣的问题。
原始解决方案是一个相关的子查询,可以为id_div带回一个随机图像: -
SELECT id_div ,
(SELECT id_img
FROM img_table t
WHERE t.id_div = main.id_div
ORDER BY RAND()
LIMIT 1) AS id_img
FROM img_table main
WHERE id_div in ('0' ,'1' , '2' , '3')
GROUP BY id_div
HAVING COUNT(*) = 2
这可能不太快(RAND()的顺序不快,相关的子查询也不快)。