Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询具有多个类别的条目?_Mysql_Sql_Tags - Fatal编程技术网

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