2009-10-03 187 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