查询具有多个类别的条目?

时间:2012-05-17 00:16:15

标签: mysql sql tags

我想要一个图片库,每个图库都会标有一组标签,我希望用户能够搜索任意数量的这些标签,我想它是否有点效率。我真的不知道从哪里开始。

每个类别在“类别”表中都有一个条目,如下所示:

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

并且'画廊'表中的每个条目都会为它们所属的每个类别存储多个类别ID(虽然我不确定如何存储它们或在此时查询它们)

如果不是我计划的搜索功能,我只是序列化类别数组,但查询效率不高。

1 个答案:

答案 0 :(得分:1)

转到第三范式

 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

然后使用 union intersect

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

在gallery_category的两列上都有索引,这应该相当快。

不幸的是,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