列のあるテーブルがあり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 |