将MYSQL GROUP_CONCAT与子查询一起使用

时间:2014-06-27 18:15:33

标签: mysql sql group-concat

我正试着在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似乎不会对返回的结果产生任何影响。

提前感谢您的帮助

3 个答案:

答案 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;