使用MySQL
,我能夠作相似的事情: html
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
個人輸出: mysql
shopping fishing coding
可是我只想要1行1列: ajax
預期產量: sql
shopping, fishing, coding
緣由是我要從多個表中選擇多個值,而且在全部聯接以後,我獲得的行比我想要的要多得多。 函數
我在MySQL Doc上尋找了一個函數,它看起來不像CONCAT
或CONCAT_WS
函數接受結果集,因此這裏有人知道如何作到這一點嗎? 編碼
使用MySQL(5.6.13)會話變量和賦值運算符,以下所示 spa
SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;
那麼你能夠獲得 code
test1,test11
在個人狀況下,我有一排Ids,而且必須將其強制轉換爲char,不然,結果將被編碼爲二進制格式: htm
SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table
您能夠經過設置group_concat_max_len
參數來更改GROUP_CONCAT
值的最大長度。 排序
請參閱MySQL文檔中的詳細信息。
警告:這篇文章會讓你餓。
我發現本身想要選擇多個單獨的行(而不是一組),並鏈接到某個字段。
假設您有一張產品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_CONCAT
和IN
子句 :
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 ...
您可使用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 );