Mysql 查询具有多个类别的条目?
我想有一个图片画廊,每个画廊将与一组标签标记,我希望用户能够搜索任何数量的这些标签,我想如果它有点效率。我真的不知道从哪里开始 每个类别在“类别”表中都有一个条目,如下所示:Mysql 查询具有多个类别的条目?,mysql,sql,tags,Mysql,Sql,Tags,我想有一个图片画廊,每个画廊将与一组标签标记,我希望用户能够搜索任何数量的这些标签,我想如果它有点效率。我真的不知道从哪里开始 每个类别在“类别”表中都有一个条目,如下所示: id | name | description ---+------+------------------------------------ 0 | cats | This is a gallery full of cats 1 | dogs | This is a gallery full of dogs “ga
id | name | description
---+------+------------------------------------
0 | cats | This is a gallery full of cats
1 | dogs | This is a gallery full of dogs
“galleries”表中的每个条目都会为它们所属的每个类别存储多个类别ID(尽管我不确定此时如何存储或查询它们)
如果不是因为我计划使用的搜索功能,我只会序列化类别数组,但这根本不能有效地进行查询。使用第三种标准形式
gallery
id | desc
----+---------
1 | dogs
2 | cats
3 | cats and dogs playing
然后使用union intersect
select gallery_id from gallery_category where category_id=1
INTERSECT
select gallery_id from gallery_category where category_id=0
在gallery_类别的两列上都有索引,这应该相当快
不幸的是,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
我想你需要第三张桌子……嗯,是的,我想我知道你的意思了,既然你提到了。第三个表将有(Gallery ID | Category ID),我只需在不同类别中多次插入Gallery ID。(0 | 0,0 | 1)等等。就这样。看见你自己想出来的!联合没有意义,最好只在中使用:
从gallery_category中选择gallery_id,其中category_id位于(0,1)中代码>这将返回与您的Union完全相同的结果谢谢,你们都是一个很好的帮助您是对的,我认为“intersect”。并写下“联盟”,
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