suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ist es möglich, mehrere MySQL-Zeilen in einem Feld zu verketten?

<p>Mit <code>MySQL</code> kann ich Folgendes tun: </p> <pre class="brush:php;toolbar:false;">SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;</pre> <p><strong>Meine Ausgabe:</strong></p> <pre class="brush:php;toolbar:false;">einkaufen Angeln Codierung</pre> <p>Aber ich möchte nur eine Zeile und eine Spalte:</p> <p><strong>Gewünschte Ausgabe: </strong></p> <pre class="brush:php;toolbar:false;">Einkaufen, Angeln, Programmieren</pre> <p>Der Grund dafür ist, dass ich mehrere Werte aus mehreren Tabellen auswähle und nach all den Verknüpfungen mehr Zeilen erhalte, als ich möchte. </p> <p>Ich habe in der MySQL-Dokumentation nach einer Funktion gesucht und es sieht so aus, als würden die Funktionen <code>CONCAT</code> keine Ergebnismenge akzeptieren. </p> <p>Weiß hier also jemand, wie das geht? </p>
P粉556159786P粉556159786504 Tage vor507

Antworte allen(2)Ich werde antworten

  • P粉366946380

    P粉3669463802023-08-23 12:03:30

    如果你的MySQL版本(4.1)支持,可以查看一下GROUP_CONCAT。更多详细信息请参考文档

    查询语句如下:

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

    Antwort
    0
  • P粉002023326

    P粉0020233262023-08-23 10:26:52

    您可以使用GROUP_CONCAT函数:

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

    正如Ludwig在他的评论中所述,您可以添加DISTINCT运算符以避免重复:

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

    正如Jan在他们的评论中所述,您还可以在合并之前对值进行排序,使用ORDER BY

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

    正如Dag在他的评论中所述,结果有一个1024字节的限制。为了解决这个问题,在您的查询之前运行以下查询:

    SET group_concat_max_len = 2048;

    当然,您可以根据需要更改2048的值。计算并分配值的方法如下:

    SET group_concat_max_len = CAST(
                         (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                               FROM peoples_hobbies
                               GROUP BY person_id) AS UNSIGNED);

    Antwort
    0
  • StornierenAntwort