我有一個表格,其中有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 |
如果您添加表格定義和樣本數據到您的問題可能會有所幫助。 –
Aziz,完成,謝謝 –
在該表中,'id'看起來像主鍵?正確,如果是的話,GROUP BY怎麼能做到?它將永遠是一個'每個行' – barryhunter