Comment concaténer plusieurs lignes MySQL en un seul champ ?
P粉482108310
P粉482108310 2023-08-28 11:10:23
0
2
320

En utilisant MySQL, je peux effectuer les opérations suivantes :

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

Ma sortie :

shopping pêche codage

Mais je veux seulement 1 ligne, 1 colonne :

Résultat attendu :

shopping, pêche, codage

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.

J'ai recherché une fonction sur la documentation MySQL et il ne semble pas que les fonctions CONCAT ou CONCAT_WS

Est-ce que quelqu'un ici sait comment faire ça ?

P粉482108310
P粉482108310

répondre à tous (2)
P粉520545753

VérifiezGROUP_CONCATsi votre version MySQL (4.1) le prend en charge. Pour plus d'informations, consultezDocumentationDétails.

Cela ressemble à :

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

    Vous pouvez utiliserGROUP_CONCAT:

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

    Comme Ludwig l'a mentionné dansson commentaire, a> vous pouvez ajouter l'opérateurDISTINCTDISTINCT pour éviter la duplication :

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

    Comme Jan l'a mentionné dansleur commentaire, a> vous pouvez également trier les valeurs avant d'imploser en utilisantORDER 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é dansson 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 changer20482048 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
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!