我有一个带有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 |