J'utilise GROUP_CONCAT()
dans une requête MySQL pour convertir plusieurs lignes en une seule chaîne. Cependant, la longueur maximale du résultat de cette fonction est de 1024
caractères.
Je sais très bien que je peux changer le paramètre group_concat_max_len
pour augmenter cette limite:
SET SESSION group_concat_max_len = 1000000;
Cependant, sur le serveur que j'utilise, je ne peux changer aucun paramètre. Pas en utilisant la requête précédente et en ne modifiant aucun fichier de configuration.
Ma question est donc la suivante: existe-t-il un autre moyen d’obtenir la sortie d’une requête à plusieurs lignes en une seule chaîne?
CREATE TABLE some_table (
field1 int(11) NOT NULL AUTO_INCREMENT,
field2 varchar(10) NOT NULL,
field3 varchar(10) NOT NULL,
PRIMARY KEY (`field1`)
);
INSERT INTO `some_table` (field1, field2, field3) VALUES
(1, 'text one', 'foo'),
(2, 'text two', 'bar'),
(3, 'text three', 'data'),
(4, 'text four', 'magic');
Cette requête est un peu étrange mais elle n’a pas besoin d’une autre requête pour initialiser la variable; et il peut être incorporé dans une requête plus complexe. Il renvoie tous les champs2 séparés par un point-virgule.
SELECT result
FROM (SELECT @result := '',
(SELECT result
FROM (SELECT @result := CONCAT_WS(';', @result, field2) AS result,
LENGTH(@result) AS blength
FROM some_table
ORDER BY blength DESC
LIMIT 1) AS sub1) AS result) AS sub2;
SET SESSION group_concat_max_len = 1000000;
est un paramètre temporaire, session-scope. Cela ne s'applique qu'à la session en cours. Vous devriez l'utiliser comme ceci.
SET SESSION group_concat_max_len = 1000000;
select group_concat(column) from table group by column
Vous pouvez le faire même en partageant un hébergement, mais lorsque vous utilisez une autre session, vous devez répéter la commande SET SESSION
.
Le paramètre correct pour définir la longueur maximale est:
SET @@group_concat_max_len = value_numeric;
value_numeric
doit être> 1024; Par défaut, la valeur group_concat_max_len
est 1024.
Incluez ce paramètre dans le fichier de configuration xampp my.ini:
[mysqld]
group_concat_max_len = 1000000
Puis redémarrez xampp mysql
Tu peux essayer ça
SET GLOBAL group_concat_max_len = 1000000;
La syntaxe correcte est mysql> SET @@global.group_concat_max_len = integer;
Si vous ne disposez pas des privilèges nécessaires pour effectuer cette opération sur le serveur sur lequel réside votre base de données, utilisez une requête telle que:
MySQL = "SET @@session.group_concat_max_len = 10000;"
ou une valeur différente.
Ligne suivante:SET objRS = objConn.Execute(mySQL)
vos variables peuvent être différentes.
ensuitemySQL="SELECT GROUP_CONCAT(......);"
etc
J'utilise la dernière version car je ne dispose pas des privilèges nécessaires pour modifier globalement la valeur par défaut de 1024 (à l'aide de cPanel).
J'espère que cela t'aides.