簡體   English   中英

如何從查詢中選擇不同的值並將其連接到一列

[英]How to select distinct values from query and concatenate into one column

我有一個帶有category列的表。 除了選擇客戶外,我還想在每一行上選擇類別的可能值,即該子集中類別的所有唯一值。

我的桌子看起來像這樣:

| id | name          | category    |
------------------------------------
| 1  | Test Client   | Retail      |
| 2  | Test Client 2 | Corporate   |
| 3  | Test Client 3 | Retail      |
| 4  | Test Client 4 | Retail      |
| 5  | Test Client 5 | Leisure     |

我以為GROUP_CONCAT可以解決問題:

SELECT `client`.*, GROUP_CONCAT(DISTINCT client.category) AS possible_categories
FROM (`client`)
WHERE  `name`  LIKE '%query%'
GROUP BY `client`.`id`

...但是它只是給我該行的類別,而不是其他行。

我可以用代碼來完成,但這是一個O(n)操作,我希望節省處理時間。 出於說明目的,這是我可以在代碼中進行的操作:

return array_unique(array_map(function($client)
{
    return $client->category;
}, $clients));

理想的情況是看這樣一個表:

| id | name          | category    | possible_categories     |
---------------------------------------------------------------
| 1  | Test Client   | Retail      | Retail,Corporate,Leisure |
| 2  | Test Client 2 | Corporate   | Retail,Corporate,Leisure |
| 3  | Test Client 3 | Retail      | Retail,Corporate,Leisure |
| 4  | Test Client 4 | Retail      | Retail,Corporate,Leisure |
| 5  | Test Client 5 | Leisure     | Retail,Corporate,Leisure |

假設您是指匹配名稱的可能類別:-

SELECT `client`.*, Sub1.possible_categories
FROM (`client`)
CROSS JOIN (SELECT GROUP_CONCAT(DISTINCT client.category) AS possible_categories FROM (`client`) WHERE  `name`  LIKE '%query%') Sub1
WHERE  `name`  LIKE '%query%'

請注意,LIKE中的前導通配符可能會使它運行緩慢。

如果用“可能的類別”表示所有類別,則需要分別計算它們並將其添加到:

SELECT `client`.*, cc.possible_categories
FROM `client` cross join 
     (select GROUP_CONCAT(DISTINCT client.category) AS possible_categories
      from `client`
      where `name`  LIKE '%query%'
     ) cc
WHERE  `name`  LIKE '%query%'

我認為這對您有用:

SELECT id, name, category, (SELECT GROUP_CONCAT(distinct category) FROM Client) AS possible_categories
FROM client

請參閱SQLFiddle上演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM