J'ai besoin de cette fonctionnalité, mais MySQL ne le supporte pas en ce moment. P>
J'utilise Mais lorsque la taille dépasse la limite, le XML est juste brisé! P>
Donc, je dois faire en sorte que cela ne puisse récupérer que 5 lignes! p> group_concat (Concat (...)) code> pour générer une matière de type XML. p>
6 Réponses :
Utilisez une table / sous-requête temporaire pour limiter les résultats? Sans voir votre requête, ce sera difficile de donner des conseils solides pour cet itinéraire. P>
Cependant, vous pouvez trouver le paramètre group_concat_max_len code> pour être plus utile. Il contrôle la longueur maximale d'une opération
group_concat code> dans la longueur de la chaîne. Soulevez-le pour empêcher cassé
group_concat code> s, lorsque vous ne pouvez pas vous permettre de limiter les résultats. P>
Pas vraiment une réponse à votre question, mais une référence pour d'autres personnes qui voudraient également utiliser une clause limite dans le groupe_concat (): p>
a Demande de fonctionnalité a été déposée il y a longtemps aux développeurs MySQL. Non encore implémenté: - ( p>
Un exemple de Charles Réponse:
Basic: P>
SELECT CAST( GROUP_CONCAT( field ) AS CHAR(2048) ) FROM ( SELECT field FROM table LIMIT 200 )
Oui, ça marchera. Mais il aura besoin d'une construction plus complexe pour une requête avec groupe par code>.
J'ai eu une erreur pour "chaque table dérivée doit avoir son propre alias" lors de l'utilisation de la première requête. Pour résoudre ce problème, je l'ai changé à "Sélectionnez Group_Concat (champ) (sélectionnez le champ à partir de la limite de table 200) comme alias" Merci pour la réponse.
J'ai travaillé autour de cela en utilisant Par exemple: P> Substring_index code>.
SELECT SUBSTRING_INDEX(GROUP_CONCAT(Field1 SEPARATOR ','), ',', [# of elements to return])
FROM Table1;
Pour ces cas où vous ne pouvez pas utiliser une table Temp, le meilleur moyen que je connaisse est de sélectionner un séparateur obscur, puis de tronquer à partir de la première instance dudit caractère. Cet exemple utilise le caractère NUL. P>
où L'inconvénient est si votre première ligne contient ce caractère, ce sera un résultat partiel. P>
Une solution de contournement serait de remplacer Il est bon de savoir que code> code> pourrait être remplacé pour inclure plus d'informations à l'aide de Gardez à l'esprit le Sélectionnez Substring_index (groupe_concat (séparateur de champ '\ 0'), '\ 0', 5) de la table; code> p>
champ code> est le nom du champ,
5 code> est le nombre de résultats. P>
'\ 0' code> avec une chaîne aléatoire plus longue. p>
concat code>. p>
group_concat_max_len code> par défaut à 1024 caractères, vous devez donc rechercher le changement global ou dans votre application si vous voulez plus que cela. P>
Vous pouvez simuler la rangée partitionnée à l'aide de variables utilisateur, puis limiter les lignes et appliquer group_concat:
Considérez le tableau suivant: P>
category value_con 1 5,4,3 2 10,9,8 3 15,14,13
Wow! Il est donc possible de mettre la clause WHERE en dehors de la sous-requête! Cela résout par inadvertance mon problème dans lequel j'ai eu des sous-requêtes imbriquées et MySQL ne passe pas les références de colonne plus profondes qu'un niveau. Ainsi, lorsque j'ai déplacé la clause WHERE en dehors de la sous-requête, la référence de colonne était au premier niveau et la requête couru! hmmm je suppose que si nous google assez longtemps, nous pourrions trouver des réponses à n'importe quoi! MDR
Augmentez la valeur group_concat_max_len dans my.cnf
Peut-être que vous pouvez obtenir votre réponse ici Stackoverflow.com/questions/3378324/...