2014-06-23 5 views
0

나는 내가 간단한 테이블 data을 가지고 ... 내가 필요한 것을 설명하려고 :몇 가지 열에서 하나의 열로 테이블 구조를 수정하려면 어떻게해야합니까?

id | post_id | color | year 
--------------------------- 
1 | 1  | red | 1989 
2 | 1  | red | 1990 
3 | 1  | green | 1991 

미세 다음 쿼리 작업 :

SELECT * 
FROM `data` 
WHERE color = 'red' 
AND year = 1989 

이 반환 결과 :

id | post_id | color | year 
--------------------------- 
1 | 1  | red | 1989 

coloryear 열이 동적이어야하므로 열에서 탈출해야합니다. 나는 color = 'red'year = 1989 포스트 얻을 수

SELECT * 
FROM `data` 
WHERE property = 'red' 
AND property = 1989 

:

내가 이런 일을하려고 :

id | post_id | property 
----------------------- 
1 | 1  | red 
2 | 1  | green 
3 | 1  | 1989 
4 | 1  | 1990 
5 | 1  | 1991 

을하지만 다음 쿼리를 실행할 때 때문에 몇 가지 문제가있다 mysql은 빈 결과를 리턴한다.

coloryear에서 탈출 테이블을 수정하고 첫 번째 예제의 쿼리 로직을 그대로 둘 수 있습니까?

답변

1

첫 번째 쿼리를 유지하지만 결과의 조합을 사용하여 두 개의 열을 반환 :

SELECT POST_ID, color as property 
FROM `data` 
WHERE color = 'red' 
AND year = 1989 
UNION ALL 
SELECT Post_ID, Year as Property 
FROM `data` 
WHERE color = 'red' 
AND year = 1989 

나는이에게 자신을 사용하여 상상할 수는 없지만. 나는 분리 된 컬럼을 선호한다. 귀하의 설명대로 비즈니스 요구 사항이나 기술 목록을 반환 할 필요는 없습니다. 프레젠테이션은 디스플레이 레벨에서 제어되어야합니다. 하나의 열이 필요하면 열을 반복하고 다르게 렌더링해야합니다.

아 사용자 정의 필드가 COMMENT--

에 근거한

--- 편집 : 는 그래서 귀하의 질문은 아닌 것 같아이 작업을 수행하는 방법은 여러 가지가 있습니다, 당신은 것을 덮여있다 .. 디자인에 있습니다. 귀하의 질문은 다음과 같습니다 :

사용자가 두 개의 서로 다른 값을 필터링 기준으로 정의 할 경우 각 데이터 개체가 모두 두 개의 요소를 가지고 있는지 확인하는 방법은 무엇입니까?

Select post_ID, property 
from data 
Where property = 'red' 
or property = '1989' 
group by post_Id, property 
having count(post_ID) = 2 

당신이 선택한 수에 따라 찾았다되고 얼마나 많은 특성을 알고

HAVING 절과 또는 문을 사용하여. 그래서 이것을 having 절의 속성으로 사용하십시오.

+0

고마워요! 그러나 나는 그것이 매우 복잡하다고 생각합니다. 특히 색상, 연도, 유형 등과 같은 일부 필드를 추가하는 경우 ... 저는 제가 [코멘트] (http://stackoverflow.com/questions/24367839/)에서 필요한 것을 설명하려고합니다. 몇 가지 열에서 하나까지 # comment-37682793) –

+0

매우 흥미로운 솔루션이 있으며 간단한 예제에서 작동하지만 시간이 필요합니다. 더 복잡한 경우에 사용합니다. 이 주제에서 나에게 도움이 될 문서 나 게시물에 대한 링크를 조언 해 주실 수 있습니까? –

+0

그리고 아마도 더 나은 해결책이 존재할 것입니다. 예를 들어'property' 열이 없거나 제 구조의 일부 수정이 없다면? –

관련 문제