Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database - Fatal编程技术网

具有多个条件的项目的mysql查询(项目选项)

具有多个条件的项目的mysql查询(项目选项),mysql,database,Mysql,Database,我想要达到的是 a:显示所有选定类别中的所有项目 b:返回/更新类别列表,其中包含基于选择的可用类别 我喜欢使用邻接列表模型或嵌套集来存储和查找项目。 我已经用这两种方法做过实验,可能会用一些建议来说明什么是最适合这种情况的 目前,我正在使用邻接列表模型进行测试,如下所示: items: ID | item_name ==================== 1 | car 2 | boat 3 | bike items_cats: (many to many) iid | cid

我想要达到的是 a:显示所有选定类别中的所有项目 b:返回/更新类别列表,其中包含基于选择的可用类别

我喜欢使用邻接列表模型或嵌套集来存储和查找项目。 我已经用这两种方法做过实验,可能会用一些建议来说明什么是最适合这种情况的

目前,我正在使用邻接列表模型进行测试,如下所示:

items:  
ID | item_name
====================
1  | car
2  | boat
3  | bike

items_cats: (many to many)
iid | cid
====================
1   |  1
1   |  2
1   |  4
1   |  7

2   |  1
2   |  3
2   |  4
2   |  7

3   |  1
3   |  3
3   |  4
3   |  8

categorys: 
ID | cat_name  | parent_id
========================
1  | safety:   |   0    (0 = no parent)
2  | safe      |   1
3  | dangerous |   1

4  | fun:      |   0
5  | a bit     |   5
6  | boring    |   5
7  | funny     |   5
8  | cool      |   5
因此,根据cid获取项目没有问题,但您将如何:

第一:选择: 1-显示具有cat id:cid 7的所有项目? 2-返回包含也包含cid 7的项目的所有类别的数组/对象? 你们会在一个查询中完成这项工作,还是在两个查询中更有效

第二:选择: 3-显示具有cat id:cid 7且包含cat id“3”的所有项目 4-返回包含cid 7和cid 3的项目的所有类别的数组/对象

对于选择多个类别,我找到了流动的解决方案。这是一个好的选择吗?特别是当类别的数量增加时,会有什么表现吗

    SELECT 
      DISTINCT t1.product_id, t1.category_id
    FROM 
      items_cats t1   
    INNER JOIN
       items_cats t1b 
       ON t1.iid =t1b.iid 
    WHERE
      t1.cid=3 AND
      t1b.cid=7

要获取类别ID为7的所有项目的列表,请从many:many表开始

select
      i.item_name
   from
      items_cat ic
         join items i
            on ic.iid = i.id
   where
      ic.cid = 7
要获取与类别ID为7的任何项目关联的所有类别,可以从第一个类别展开,并获取与这些项目ID关联的类别

select DISTINCT
      ic2.cid,
      c.cat_name,
      coalesce( CatParent.cat_name, "" ) as ParentCategoryName
   from
      ( select distinct ic.iid
           from items_cat ic
           where ic.cid = 7 ) QualifiedItems

         JOIN items_cat ic2
            on QualifiedItems.iid = ic2.iid
            JOIN categorys c
               on ic2.cid = c.id
               LEFT JOIN categorys CatParent
                  on c.parent_id = CatParent.ID
对于3号和4号,情况类似,但若要同时或在任何时候超过1号获得资格,您需要申请or、GROUP BY,并确保最终计数与您试图获得资格的计数相符

select
      i.item_name
   from
      items_cat ic
         join items i
            on ic.iid = i.id
   where
      ic.cid in( 3, 7 )
   group by 
      i.item_name
   having
      count(*) = 2
因此,您可以更好地理解和应用这些原则,我将最后一个留给您尝试和实施。。。如果你真的被卡住了,让我知道…: