Ist es möglich, mehrere MySQL-Zeilen in einem Feld zu verketten?
P粉556159786
P粉556159786 2023-08-22 14:02:48
0
2
504
<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粉556159786
P粉556159786

Antworte allen(2)
P粉366946380

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

查询语句如下:

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

您可以使用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);
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage