首頁  >  問答  >  主體

如何將多個MySQL行連接成一個欄位?

<p>使用 <code>MySQL</code>,我可以執行以下操作:</p> <pre class="brush:php;toolbar:false;">SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;</pre> <p><strong>我的產出:</strong></p> <pre class="brush:php;toolbar:false;">shopping fishing coding</pre> <p>但我只想要 1 行、1 列:</p> <p><strong>預期輸出:</strong></p> <pre class="brush:php;toolbar:false;">shopping, fishing, coding</pre> <p>原因是我從多個表中選擇多個值,並且在所有連接之後,我得到的行數比我想要的多得多。 </p> <p>我在 MySQL Doc 上找了一個函數,它看起來不像 <code>CONCAT</code> 或 <code>CONCAT_WS</code> 函數接受結果集。 </p> <p>這裡有人知道如何做到這一點嗎? </p>
P粉482108310P粉482108310419 天前376

全部回覆(2)我來回復

  • P粉520545753

    P粉5205457532023-08-29 09:04:00

    看看 GROUP_CONCAT 如果您的 MySQL 版本 (4.1) 支援它。有關更多信息,請參閱文檔詳細資訊。

    它看起來像:

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

    回覆
    0
  • P粉041856955

    P粉0418569552023-08-29 00:29:10

    您可以使用GROUP_CONCAT< /代码>

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

    正如路德維希在他的評論中所述, 您可以新增 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;

    正如達格在他的評論中所述, 結果有 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);

    回覆
    0
  • 取消回覆