cari

Rumah  >  Soal Jawab  >  teks badan

Adakah mungkin untuk menggabungkan beberapa baris MySQL ke dalam satu medan?

<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 satu baris dan satu lajur: </p> <p><strong>Output yang diingini: </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 mahukan. </p> <p>Saya mencari fungsi dalam dokumentasi MySQL dan ia kelihatan seperti fungsi <code>CONCAT</code> atau <code>CONCAT_WS</code> </p> <p>Jadi adakah sesiapa di sini tahu cara melakukannya? </p>
P粉556159786P粉556159786519 hari yang lalu522

membalas semua(2)saya akan balas

  • P粉366946380

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

    Jika versi MySQL anda (4.1) menyokongnya, anda boleh menyemaknya GROUP_CONCAT. Sila rujuk Dokumentasi untuk butiran lanjut.

    Pernyataan pertanyaan adalah seperti berikut:

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

    balas
    0
  • P粉002023326

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

    Anda boleh menggunakan fungsi GROUP_CONCAT:

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

    Seperti yang Ludwig sebutkan dalam komennya, anda boleh menambah operator DISTINCT 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, anda juga boleh mengisih nilai sebelum bergabung, menggunakan ORDER BY:

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

    Seperti yang Dag nyatakan dalam ulasannya, terdapat had 1024 bait pada keputusan. Untuk membetulkannya, jalankan pertanyaan berikut sebelum pertanyaan anda:

    SET group_concat_max_len = 2048;

    Sudah tentu, anda boleh menukar nilai 2048 mengikut keperluan. Begini cara mengira dan menetapkan nilai:

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

    balas
    0
  • Batalbalas