2012-05-17 3 views
0

사진 갤러리를 갖고 싶고 각 갤러리에 일련의 태그가 표시됩니다. 사용자가이 태그를 원하는만큼 검색 할 수 있기를 원하며 다소 효율적이라면 좋겠습니다. 나는 어디에서 시작해야할지 정말로 모른다. 하지만 (그들에 속한 각 카테고리에 대해 저장된 여러 카테고리 ID를 가질 것여러 범주로 항목 쿼리?

id | name | description 
---+------+------------------------------------ 
0 | cats | This is a gallery full of cats 
1 | dogs | This is a gallery full of dogs 

하고 '갤러리'테이블의 각 항목 :

각 카테고리는 '범주'테이블의 항목, 뭔가 같은있다 내가 보관하거나 그냥 카테고리 배열을 직렬화 것 I에 계획 검색 기능 아니었다면)이 시간에

그들을 쿼리 줄 방법을 잘 모르겠어요,하지만 그건에서 쿼리 할 효율적이 아니다 모든.

+1

난 당신이 세 번째 테이블 ... –

+2

흠 필요할 것 같은데요, 그래 난 당신이 지금 당신이 그것을 언급 무슨 뜻인지 알 것 같아요. 세 번째 테이블에는 (갤러리 ID | 카테고리 ID)가 있고 갤러리 ID를 여러 카테고리에 여러 번 삽입합니다. (0 | 0, 0 | 1) 등등. – puromonogatari

+0

예. 그게 전부 야. 만나다? 너 혼자서 알아 냈어! '노동 조합으로 –

답변

1

는 3 정규형

gallery 
id | desc 
----+--------- 
1 | dogs 
2 | cats 
3 | cats and dogs playing 

에 대한 이동합니다.

gallery_category 
gallery_id | category_id 
-----------+------------- 
1   | 1 
2   | 0 
3   | 0 
3   | 1 

는이 합리적으로 빨리해야 gallery_category의 두 컬럼에 인덱스로

select gallery_id from gallery_category where category_id=1 
INTERSECT 
select gallery_id from gallery_category where category_id=0 

교차 조합을 사용합니다.

불행히도 mysql은 교차하지 않지만 join으로 같은 효과를 얻을 수 있습니다.

select a.gallery_id 
    from gallery_category as a 
    join gallery_category as b on a.gallery_id = b.gallery_id 
    where a.category_id=1 and b.category_id=0 
+0

노조가 이해가되지 않습니다, 그냥 사용하는 것이 좋을 것이다 큰 도움이되었습니다 – Toote

+0

감사를 동일한 결과를 반환, 당신은 둘 다했습니다;'CATEGORY_ID IN (0,1) gallery_category FROM gallery_id를 선택 – puromonogatari

+0

네가 맞아, 나는 "교차"한다고 생각했다. "노동 조합"이라고 썼습니다. http://stackoverflow.com/q/2300322/340140 – user340140