具有多个条件的项目的mysql查询(项目选项)
我想要达到的是 a:显示所有选定类别中的所有项目 b:返回/更新类别列表,其中包含基于选择的可用类别 我喜欢使用邻接列表模型或嵌套集来存储和查找项目。 我已经用这两种方法做过实验,可能会用一些建议来说明什么是最适合这种情况的 目前,我正在使用邻接列表模型进行测试,如下所示:具有多个条件的项目的mysql查询(项目选项),mysql,database,Mysql,Database,我想要达到的是 a:显示所有选定类别中的所有项目 b:返回/更新类别列表,其中包含基于选择的可用类别 我喜欢使用邻接列表模型或嵌套集来存储和查找项目。 我已经用这两种方法做过实验,可能会用一些建议来说明什么是最适合这种情况的 目前,我正在使用邻接列表模型进行测试,如下所示: items: ID | item_name ==================== 1 | car 2 | boat 3 | bike items_cats: (many to many) iid | cid
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
因此,您可以更好地理解和应用这些原则,我将最后一个留给您尝试和实施。。。如果你真的被卡住了,让我知道…: