我正试着在MYSQL中使用GROUP_CONCAT。
基本上我有下表table1:
id,field1,field2,active
我想在表格中带回5行但是按随机顺序排列。所以我用这个:
SELECT GROUP_CONCAT(id ORDER BY rand()) FROM table1 WHERE active=1
这表现得如我所料。然后我想使用输出从表中选择其他列(field1,field2)并显示结果。 所以我尝试过使用:
SELECT *
FROM table1
WHERE id IN
(
SELECT GROUP_CONCAT(id ORDER BY rand()) as id FROM table1 WHERE active=1
);
我期望上面这样的东西可以工作,但我无法弄清楚它为什么没有。它会带回结果但不是全部,(即)我的表包含10行。 6行设置为active = 1。因此我希望返回6行...这不会发生我可能会得到1,2或0.
此外,如果它有帮助我想将子查询返回的结果数量限制为3,但添加LIMIT似乎不会对返回的结果产生任何影响。
提前感谢您的帮助
答案 0 :(得分:0)
为什么不使用它:
SELECT *, GROUP_CONCAT(id ORDER BY rand()) as randoms FROM table1 WHERE active=1
答案 1 :(得分:0)
如果我理解正确,您正在尝试构建这样的查询:
select *
from table1
where id in (1,2,3,4,5) -- Just an example
并且您尝试使用group_concat()
结果“填充”in条件。
这不是这样做的方式。
您只需在括号中指定子查询:
select *
from table1
where id in (select id from table1 where active=1)
注意一些额外的事情:
order by rand()
无关紧要,因为无论值的顺序如何,都会评估in ()
。join
代替in
。使用join
:
select t1.*
from
table1 as t1
inner join table1 as t2 on t1.id = t2.id
where t2.active=1
答案 2 :(得分:0)
我认为这就是你要找的东西。这将带回5个随机活动行。
SELECT *
FROM table1
WHERE active=1
ORDER BY RAND()
LIMIT 5;