2009-10-03 11 views
0

Pour des performances, je dois fixer une limite pour la GROUP_CONCAT,maux de tête MySQL GROUP_CONCAT

et je dois savoir s'il y a des lignes non comprises.

Comment le faire?

EDIT

Permettez-moi donner un exemple artificiel:

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    | 
+----------------------------------+ 

Mais maintenant, je veux groupe 2 entrées au maximum, et ont besoin de savoir s'il y a une entrée non inclus dans le résultat:

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

Et je dois savoir qu'il existe une autre entrée à gauche (dans ce cas, il est « test3 »)

+0

J'ai donné un example.Is détaillé clair? – Misier

+0

Merci de donner un exemple. Comment voulez-vous savoir quand la liste des valeurs dépasse votre limite? –

+0

@ rexem, il existe de nombreux cas avec cette exigence.Si la liste des valeurs dépasse ma limite, devrait afficher un lien "Afficher tout". – Misier

Répondre

0

Comment allez-vous définir la limite? Et quels problèmes de performance va-t-il résoudre?

Vous pouvez obtenir le nombre de lignes d'un groupe en utilisant count(*) et le comparer à la limite.

+0

@ Lukáš Lalinský, désolé pour ma clarification tardive! – Misier

1

cela devrait faire l'affaire

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

Non, c'est en effet un "truc" qui fait plus de travail pour récupérer moins, ce qui n'est pas ce que je veux. – Misier

+0

limite dans group_concat n'est pas supportée à ce stade, toute solution basée sur une requête fera plus de travail qu'un simple appel de fonction comme celui-là. –

+0

Ceci est probablement aussi proche que vous pouvez l'être, et est relativement efficace si vous voulez obtenir une taille de données définie (par exemple exactement un certain nombre de valeurs) à partir de group_concat; mais pas tellement si vous voulez qu'il se comporte comme une limite. – Aea

Questions connexes