我能夠將多個MySQL行鏈接到一個字段中嗎?

使用MySQL ,我能夠作相似的事情: html

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

個人輸出: mysql

shopping
fishing
coding

可是我只想要1行1列: ajax

預期產量: sql

shopping, fishing, coding

緣由是我要從多個表中選擇多個值,而且在全部聯接以後,我獲得的行比我想要的要多得多。 函數

我在MySQL Doc上尋找了一個函數,它看起來不像CONCATCONCAT_WS函數接受結果集,因此這裏有人知道如何作到這一點嗎? 編碼


#1樓

使用MySQL(5.6.13)會話變量和賦值運算符,以下所示 spa

SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;

那麼你能夠獲得 code

test1,test11

#2樓

在個人狀況下,我有一排Ids,而且必須將其強制轉換爲char,不然,結果將被編碼爲二進制格式: htm

SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table

#3樓

您能夠經過設置group_concat_max_len參數來更改GROUP_CONCAT值的最大長度。 排序

請參閱MySQL文檔中的詳細信息。


#4樓

備用語法以鏈接多個單獨的行

警告:這篇文章會讓你餓。

鑑於:

我發現本身想要選擇多個單獨的行(而不是一組),並鏈接到某個字段。

假設您有一張產品ID及其名稱和價格的表格:

+------------+--------------------+-------+
| product_id | name               | price |
+------------+--------------------+-------+
|         13 | Double Double      |     5 |
|         14 | Neapolitan Shake   |     2 |
|         15 | Animal Style Fries |     3 |
|         16 | Root Beer          |     2 |
|         17 | Lame T-Shirt       |    15 |
+------------+--------------------+-------+

而後,您將擁有一些花哨的ajax,將這些幼犬列爲複選框。

你餓了,河馬用戶選擇13, 15, 16 。 今天沒有甜品給她...

找:

一種使用純mysql在一行中彙總用戶訂單的方法。

解:

結合使用GROUP_CONCATIN子句

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

哪一個輸出:

+------------------------------------------------+
| order_summary                                  |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+

獎勵解決方案:

若是您也想要總價,請扔SUM()

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16);
+------------------------------------------------+-------+
| order_summary                                  | total |
+------------------------------------------------+-------+
| Double Double + Animal Style Fries + Root Beer |    10 |
+------------------------------------------------+-------+

PS:很抱歉,若是您附近沒有In-N-Out ...


#5樓

您可使用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
);
相關文章
相關標籤/搜索