Question

Après avoir normalisé docilement toutes mes données, je vais avoir un problème combinant les lignes 3NF en une seule ligne pour la sortie. Jusqu'à présent, je fais cela avec le codage côté serveur, mais pour diverses raisons, je dois maintenant sélectionner toutes les lignes liées à une autre ligne, et de les combiner en une seule rangée, le tout dans MySQL ...

Donc, pour essayer d'expliquer:

J'ai trois tables.

  • Catégories
  • Articles
  • CategoryArticles_3NF

Une catégorie contient CategoryID + titres, descriptions, etc. Il peut contenir un certain nombre d'articles dans la table des articles, composé de ArticleID + un champ de texte pour héberger le contenu . CategoryArticles tableau est utilisé pour relier les deux, de sorte que contient le RéfCatégorie et ArticleID .

Maintenant, si je sélectionne un enregistrement de catégorie, et je joindre à la table des articles via le lien tableau CategoryArticles_3NF, le résultat est une ligne distincte pour chaque article contenu dans cette catégorie. Le problème est que je veux à la sortie d'une ligne unique pour chaque catégorie, contenant le contenu de tous articles dans.

Si cela ressemble à une demande ridicule, c'est parce qu'il est. Je suis juste en utilisant des articles comme une bonne façon de décrire le problème. Mes données est en réalité un peu différente.

Quoi qu'il en soit - la seule façon que je peux voir pour y parvenir est d'utiliser un ' GROUP_CONCAT déclaration de regrouper les champs de contenu ensemble - le problème est qu'il ya une limite à la quantité de données cela peut revenir, et je besoin pour être en mesure de traiter beaucoup plus.

Quelqu'un peut-il me dire comment faire?

Merci.

Était-ce utile?

La solution

Cela ressemble à quelque chose qui devrait être fait à la fin avant sans plus d'informations.

Si vous avez besoin, vous pouvez augmenter la taille limite de GROUP_CONCAT en définissant la variable système group_concat_max_len . Il a une limite basée sur max_allowed_packet , que vous pouvez également augmenter. Je pense que la taille maximale pour un paquet est de 1 Go. Si vous avez besoin d'aller plus haut que alors il y a quelques défauts sérieux dans votre conception.

EDIT: Alors, que ce soit dans la réponse et non seulement enterré dans les commentaires ...

Si vous ne voulez pas changer le group_concat_max_len dans le monde, vous pouvez le changer pour que votre session avec:

SET SESSION group_concat_max_len = <your value here>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top