gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:34:25 24 4
gpt4 key购买 nike

我喜欢实现的是
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,这将是相似的,但要同时限定两者(或任何时候,不止一个),您需要应用 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

所以你可以更好地理解和应用这些原则,我会把最后一个留给你去尝试和实现......如果你真的卡住了,请告诉我......:)

关于mysql查询具有多个条件的项目(项目选项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com