Maison > Questions et réponses > le corps du texte
P粉3669463802023-08-23 12:03:30
Si votre version MySQL (4.1) le prend en charge, vous pouvez le vérifier GROUP_CONCAT
. Veuillez vous référer à la Documentation pour plus de détails.
L'instruction de requête est la suivante :
SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies WHERE person_id = 5 GROUP BY 'all';
P粉0020233262023-08-23 10:26:52
Vous pouvez utiliser la fonction GROUP_CONCAT
:
SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
Comme Ludwig l'a mentionné dans son commentaire, vous pouvez ajouter l'opérateur DISTINCT
pour éviter la duplication :
SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
Comme Jan l'a mentionné dans leur commentaire, vous pouvez également trier les valeurs avant de les fusionner, en utilisant ORDER BY
:
SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
Comme Dag l'a déclaré dans son commentaire, il y a une limite de 1024 octets pour les résultats. Pour résoudre ce problème, exécutez la requête suivante avant votre requête :
SET group_concat_max_len = 2048;
Bien sûr, vous pouvez modifier la valeur de 2048
selon vos besoins. Voici comment calculer et attribuer des valeurs :
SET group_concat_max_len = CAST( (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ') FROM peoples_hobbies GROUP BY person_id) AS UNSIGNED);