Frage

Mit dutifully normalisiert alle meine Daten, ich habe ein Problem Kombinieren 3NF Zeilen in einer einzigen Zeile für die Ausgabe. Bis jetzt habe ich das getan, mit serverseitige Codierung, aber aus verschiedenen Gründen muß ich nun alle Zeilen in einer anderen Zeile mit Bezug zu wählen, und sie in einer einzigen Reihe zu kombinieren, die alle in MySQL ...

So zu versuchen und zu erklären:

Ich habe drei Tabellen.

  • Kategorien
  • Artikel
  • CategoryArticles_3NF

Eine Kategorie enthält CategoryID + Titel, Beschreibungen usw. eine beliebige Anzahl von Artikeln in der Artikel-Tabelle enthalten, die aus ArticleID + ein Textfeld den Inhalt Haus . Die CategoryArticles Tabelle verwendet wird, um die beiden zu verbinden, so enthält sowohl die CategoryID und ArticleID .

Nun, wenn ich eine Kategorie Datensatz aus, und ich JOIN die Artikel-Tabelle über die Verknüpfung CategoryArticles_3NF Tabelle, ist das Ergebnis eine separate Zeile für jeden Artikel in dieser Kategorie enthält. Das Problem ist, dass ich für jede Kategorie Ausgang eine einzelne Zeile will, mit Inhalt von alle Artikel innerhalb.

Wenn das klingt wie ein lächerlicher Wunsch ist es, weil es ist. Ich verwende nur Artikel als eine gute Möglichkeit, das Problem zu beschreiben. Meine Daten sind eigentlich etwas anders aus.

Wie auch immer - der einzige Weg, ich sehe dies zu erreichen, ist ein verwenden ‚ GROUP_CONCAT ‘ Anweisung zur Gruppe der Inhaltsfelder zusammen - das Problem dabei ist, dass es eine Grenze, wie viele Daten dies kann zurückkehren, und ich brauche es in der Lage sein, deutlich mehr zu handhaben.

Kann jemand mir sagen, wie dies zu tun?

Danke.

War es hilfreich?

Lösung

Das klingt wie etwas, das in dem vorderen Ende ohne weitere Informationen getan werden sollte.

Wenn Sie möchten, können Sie die Größenbeschränkung von GROUP_CONCAT erhöhen, indem die Systemvariable Einstellung group_concat_max_len . Es hat eine Grenze basierend auf max_allowed_packet , die Sie auch erhöhen können. Ich denke, dass die maximale Größe für ein Paket ist 1 GB. Wenn Sie gehen müssen höher als dann gibt es einige gravierende Mängel in Ihrem Design.

EDIT: Damit dies in der Antwort ist, und zwar nicht nur in den Kommentaren begraben ...

Wenn Sie nicht wollen, ändern Sie die group_concat_max_len global dann können Sie es nur mit Ihrer Sitzung ändern:

SET SESSION group_concat_max_len = <your value here>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top