Bagaimana untuk menggabungkan beberapa baris MySQL ke dalam satu medan?
P粉482108310
P粉482108310 2023-08-28 11:10:23
0
2
415
<p>Menggunakan <code>MySQL</code>, saya boleh melakukan perkara berikut: </p> <pre class="brush:php;toolbar:false;">PILIH hobi DARI peoples_hobbies WHERE person_id = 5;</pre> <p><strong>Output saya: </strong></p> <pre class="brush:php;toolbar:false;">belanja memancing pengekodan</pre> <p>Tetapi saya hanya mahu 1 baris, 1 lajur: </p> <p><strong>Keluaran yang dijangkakan: </strong></p> <pre class="brush:php;toolbar:false;">belanja, memancing, pengekodan</pre> <p>Sebabnya ialah saya memilih berbilang nilai daripada berbilang jadual dan selepas semua gabungan, saya mendapat lebih banyak baris daripada yang saya mahu. </p> <p>Saya mencari fungsi pada Dokumen MySQL dan ia tidak kelihatan seperti fungsi <code>CONCAT</code> atau <code>CONCAT_WS</code> </p> <p>Adakah sesiapa di sini tahu cara melakukannya? </p>
P粉482108310
P粉482108310

membalas semua(2)
P粉520545753

Lihat GROUP_CONCAT jika versi MySQL anda (4.1) menyokongnya. Untuk maklumat lanjut, lihat DokumentasiButiran.

Ia kelihatan seperti:

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

Anda boleh menggunakan GROUP_CONCAT:

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

Seperti yang disebut oleh Ludwig dalam ulasannya, a> anda boleh menambah pengendali DISTINCTDISTINCT untuk mengelakkan pertindihan:

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

Seperti yang Jan sebutkan dalam komen mereka, a> anda juga boleh mengisih nilai sebelum meletup menggunakan ORDER BYPESANAN OLEH:

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

Seperti yang Dag nyatakan dalam ulasannya, keputusan mempunyai had 1024 bait. Untuk menyelesaikan isu ini, jalankan pertanyaan ini sebelum:

SET group_concat_max_len = 2048;

Sudah tentu, anda boleh menukar 20482048 jika anda mahu. Kira dan tetapkan nilai:

SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan