Comment concaténer plusieurs lignes MySQL en un seul champ ?
P粉482108310
P粉482108310 2023-08-28 11:10:23
0
2
424
<p>En utilisant <code>MySQL</code>, je peux effectuer les opérations suivantes : </p> <pre class="brush:php;toolbar:false;">SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;</pre> <p><strong>Ma sortie :</strong></p> <pre class="brush:php;toolbar:false;">shopping pêche codage</pre> <p>Mais je veux seulement 1 ligne, 1 colonne : </p> <p><strong>Résultat attendu : </strong></p> <pre class="brush:php;toolbar:false;">shopping, pêche, codage</pre> <p>La raison est que je sélectionne plusieurs valeurs dans plusieurs tables et qu'après toutes les jointures, j'obtiens beaucoup plus de lignes que je ne le souhaite. </p> <p>J'ai recherché une fonction sur la documentation MySQL et il ne semble pas que les fonctions <code>CONCAT</code> ou <code>CONCAT_WS</code> </p> <p>Est-ce que quelqu'un ici sait comment faire ça ? </p>
P粉482108310
P粉482108310

répondre à tous(2)
P粉520545753

Vérifiez GROUP_CONCAT si votre version MySQL (4.1) le prend en charge. Pour plus d'informations, consultez DocumentationDétails.

Cela ressemble à :

SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') 
  FROM peoples_hobbies 
  WHERE person_id = 5 
  GROUP BY 'all';
P粉041856955

Vous pouvez utiliser GROUP_CONCAT :

SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Comme Ludwig l'a mentionné dans son commentaire, a> vous pouvez ajouter l'opérateur DISTINCTDISTINCT 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, a> vous pouvez également trier les valeurs avant d'imploser en utilisant ORDER BYORDER 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, les résultats ont une limite de 1024 octets. Pour résoudre ce problème, exécutez cette requête avant :

SET group_concat_max_len = 2048;

Bien sûr, vous pouvez changer 20482048 si vous le souhaitez. 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);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal