Frage

Die SQL ...

UPDATE Threads t 
SET t.Content = (
    SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '<!-- pagebreak -->') 
    FROM MSarticlepages a
    WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID
)

Wie Sie sehen es alle eines Artikels Seiten nimmt (die jeweils gespeichert, wie in long getrennten Reihen) und sie in eine GROUP_CONCATs Einzellong Reihe. Das Problem ist, die Ergebnisse sind nur so viele Zeichen und dann wird es vollständig abgeschnittene, verlieren etwa 90% der die Inhalte. Hat CONCAT nicht umgehen long sehr gut oder gibt es etwas, was ich tue falsch?

Andere Tipps

Der Titel dieses Beitrags ist „Trouble mit CONCAT und Long“, die irreführend ist, da er, der die Frage wirklich gestellt wollte über GROUP_CONCAT wissen. Ich fand diesen Beitrag in Google, weil ich mit einer Begrenzung mit CONCAT in MySQL zu tun war. Für diejenigen von Ihnen, die diese Post finden und suchen, wie die maximale Länge für CONCAT hier erlaubt zu erhöhen, ist, wie es geht:

Das Problem group_concat_max_len ist die Anpassung für CONCAT nicht funktioniert es nur für GROUP_CONCAT funktioniert, was bedeutet, dass, wenn Sie in diese Einschränkung mit CONCAT ausgeführt werden Sie Ihre Abfrage verwenden GROUP_CONCAT überarbeiten müssen.

So sagen Sie CONCAT auf folgende Weise verwenden:

UPDATE some_table
SET some_field=CONCAT(some_field,'super long string to append to the end of the data in some_field')
WHERE some_criteria_field = 'match on this string';

Aber die Daten, die Sie am Ende des some_field Inhalt zu verketten versuchen wird immer abgeschnitten oder gerade Ebene das Feld some_field Einstellung auf null / leer. Hier ist also die Art und Weise wird die Abfrage aussehen müssen, um die klaren Grenzen CONCAT zu lindern:

SET @@session.group_concat_max_len = @@global.max_allowed_packet;
UPDATE some_table SET some_table.some_field=(
     SELECT GROUP_CONCAT( queue.append_to_end SEPARATOR '') as new_some_field
     FROM
     (
          SELECT append_to_end FROM some_table WHERE some_criteria_field = 'match on this string'
          UNION
          SELECT 'super long string to append to the end of the data in some_field' as append_to_end
     ) as queue
) WHERE some_criteria_field = 'match on this string'

Für weitere ausführliche Informationen der Artikel herausfinden, wo ich diese Antwort auf dem Link unten gefunden. Quelle: http://boulderapps.co/mysql-concat-limitation

GROUP_CONCAT bei mysql docs:

  

Das Ergebnis wird auf die maximale abgeschnitten   Länge, die durch die gegeben ist   group_concat_max_len Systemvariable,   was hat einen Standardwert von 1024. The   Wert kann höher eingestellt werden, obwohl die   effektive maximale Länge der Rück   Wert wird durch den Wert eingeschränkt   max_allowed_packet. Die Syntax   Ändern Sie den Wert von   group_concat_max_len zur Laufzeit ist als   folgt, wobei val ein unsigned ist   integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;

http: // dev .mysql.com / doc / refman / 5.0 / de / group-by-functions.html # function_group-concat

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top