2012-09-17 2 views
1

가입 떠났다. 예를 들어MySQL은 내가이 형식으로 테이블이 부속

:

항목 = {2,3} -> 태그 {2,3}, 항목 2가 갖는 태그 2,3, 3 항목 태그 2,3- 있고, 일반적인 태그 2,3-있다

items = {1,2,3} -> tags {}, 항목 1은 태그 1,3, 항목 2는 태그 2,3, 항목 3은 태그 2,3, 일반 태그는 3

아이템 = {1,3} -> 태그 {3}, 아이템 1은 태그 1,3, 아이템 3은 태그 2,3, 공통 태그 3 3

입력으로 설정했습니다. 나는 그러한 쿼리를 작성하는 방법을 모른다.

감사합니다. 문제를 해결하기

+0

그래서 항목 목록을 제공하고 그 목록에 대한 공통 태그를 원하십니까? 또는 항목 및 공통 태그 목록일까요? – gbn

+0

나는 항목 목록을 가지고 있으며 공통된 태그를 원합니다. – user1677674

답변

0

쿼리는

SELECT tag FROM <table_name> 
WHERE item IN (<items to be searched seperated by ,>) 
GROUP BY tag 
HAVING COUNT(*) = <number of items>; 

예를 들어, (태그 및 항목에 대한 중복 된 항목이 없다고 가정)

SELECT GROUP_CONCAT(a.tag) FROM (
SELECT tag FROM <table_name> 
WHERE item IN (<items to be searched seperated by comma>) 
GROUP BY tag 
HAVING COUNT(*) = <no. of items>) AS a; 

는 희망이 도움이 쿼리를 다음과 같은 항목에 대한 항목 {1,3}

SELECT tag FROM <table_name> 
WHERE item IN (1,3) 
GROUP BY tag 
HAVING COUNT(*) = 2; 

쉼표를 사용하여 구분보고 결과를 {1,2,3}

SELECT tag FROM <table_name> 
WHERE item IN (1,2,3) 
GROUP BY tag 
HAVING COUNT(*) = 3; 

합니다. ..

1

같은 태그를 공유하는 항목 목록을 찾고 있다고 생각합니까?

이 쿼리는 자동으로 수행됩니다. 그것은 각 항목에 대한 태그를 그룹화하는 내부 요약 쿼리와 태그 그룹을 공유하는 항목을 그룹화하는 외부 요약 쿼리로 구성됩니다.

SELECT GROUP_CONCAT(item ORDER by ITEM) items, tags 
    FROM (
      SELECT GROUP_CONCAT(tag ORDER BY tag) tags, item 
      FROM tbl 
     GROUP BY item 
     )t 
    GROUP BY tags 
    ORDER BY tags 

그것은 귀하의 질문에 테스트 데이터 집합, 반환

입니다
| ITEMS | TAGS | 
---------------- 
|  1 | 1,3 | 
| 2,3 | 2,3 | 

, 1 태그 1 3. 항목 2와 3을 가지고 당신의 품목은 태그 2, 3

피들 이동! http://sqlfiddle.com/#!2/6a927/3/0

+0

항목 목록이 있고 동일한 항목을 공유하는 항목을 찾고 싶습니다. 모든 가능성을 찾고있는 것이 아닙니다. – user1677674

관련 문제