2009-10-03 121 views
0

出于性能考虑,我需要设置为GROUP_CONCAT的限制,MySQL的GROUP_CONCAT头痛

,我需要知道,如果有不包括行。

怎么办呢?

编辑

让我提供一个人为的例子:

create table t(qid integer unsigned,name varchar(30)); 

insert into t value(1,'test1');  
insert into t value(1,'test2');  
insert into t value(1,'test3'); 

select group_concat(name separator ',') 
    from t 
where qid=1; 

+----------------------------------+ 
| group_concat(name separator ',') | 
+----------------------------------+ 
| test1,test2,test3    | 
+----------------------------------+ 

但现在,我想组最多2项,要知道,如果没有包括在一些入门结果:

+----------------------------------+ 
| group_concat(name separator ',') | 
+----------------------------------+ 
| test1,test2      | 
+----------------------------------+ 

,我需要知道有离开另一个项目(在这种情况下它的“TEST3”)

+0

我已经给出了详细的example.Is清楚了吗? – Misier 2009-10-03 18:16:58

+0

感谢您提供示例。您如何知道数值列表何时超出限制? – 2009-10-03 18:49:47

+0

@rexem,这个需求有很多情况。如果值的列表超过了我的限制,应该显示一个“Show All”链接。 – Misier 2009-10-03 19:42:30

回答

0

你如何去设置的限制?它会解决哪些性能问题?

可以使用count(*)得到行的一组数字,并将其与限制。

+0

@LukášLalinský,很抱歉我迟到的澄清! – Misier 2009-10-03 18:17:42

1

这应该做的伎俩

SELECT 
SUBSTRING_INDEX(group_CONCAT(name) , ',', 2) as list , 
(if(count(*) > 2 , 1 , 0)) as more 
FROM 
    t 
WHERE 
    qid=1 
+1

不,这确实是一个“诀窍”,可以做更多的工作来检索更少,这不是我想要的。 – Misier 2009-10-03 21:46:40

+0

此时不支持group_concat的限制,任何基于查询的解决方案都会比类似的简单函数调用做更多的工作。 – 2009-10-03 21:49:43

+0

这可能是接近你可以得到,如果你想从GROUP_CONCAT一组数据大小(例如究竟有一定数目的值)是相对有效的;但如果你想让它表现得像一个极限,那就不是那么重要。 – Aea 2010-06-30 17:27:41