2013-06-03 3 views
0

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) 작업이므로 처리 시간을 절약 할 수 있습니다. 여기에 내가 설명을 목적으로, 코드에서 할 수있는 방법은 다음과 같습니다 당신이 일치하는 이름에 사용할 수있는 범주를 의미 가정

| 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 | 
+0

테이블 정의 및 샘플 데이터를 질문에 추가 할 때 유용 할 수 있습니다. –

+0

Aziz, done, thank you –

+0

그 테이블에서 'id'는 기본 키처럼 보입니까? 올바른 경우, GROUP BY가 어떻게 할 수 있습니까? 그것은 항상 하나의 '그룹당 줄'이 될 것입니다. – barryhunter

답변

0

:

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

이상적인 시나리오는이 같은 표를 참조하는 것입니다 : -

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의 주요 와일드 카드는 아마도 천천히 실행됩니다.

0

"가능한 범주는"당신이 모든 범주를 의미하여, 당신은 별도로 계산에 추가해야하는 경우 :이 당신을 위해 일 것이라고 생각

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%' 
0

:

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

demo on SQLFiddle을 참조하십시오.

관련 문제