gpt4 book ai didi

php - MySQL 几个内部连接与子查询

转载 作者:行者123 更新时间:2023-11-30 22:34:27 26 4
gpt4 key购买 nike

我在无需使用 PHP 构建查询的情况下简化复杂查询时遇到了问题。

我的问题:

一个产品可以有多个属性,例如。颜色、大小和状态。要获得具有所有 3 个属性的产品,我可以:

products p

INNER JOIN product_propeties p1 on p.pid = p1.pid AND p1.property = 1 (color)

INNER JOIN product_propeties p2 on p.pid = p2.pid AND p2.property = 2 (size)

INNER JOIN product_propeties p3 on p.pid = p3.pid AND p3.property = 3 (state)

这很好用。我将获得具有所有这 3 个属性的所有产品。

我现在的问题是我不想用 PHP 生成 p1、p2、p3。属性列在表“property_groups”中。在此表中,我可以对属性进行分组。

proberty|title|group_name

1|color|winterspecial

2|size|winterspecial

3|state|winterspecial

我想加入带有“winterspecial”的“property_groups”表,我不知道如何加入上面的示例。问题是每个属性都需要存在。几个单一的连接完成这项工作。但是如何在单个 MySQL 查询中完成。

使用 PHP,我选择所有“winterspecial”,然后使用 p1、p2...构建查询

一定有更好的方法。请注意,属性必须是 AND connectet。或者很容易,这将是一个简单的子选择。

INNER JOIN product_propeties p1 on p.pid = p1.pid AND product_propeties IN (
SELECT * FROM property_groups WHERE "winterspecial"
)

最佳答案

这可能看起来有点笨拙,但这是我目前唯一能想到的……

为了了解产品是否具有所有 winterspecial 属性,我们可以计算所有现有的 winterspecial 属性和产品的 winterspecial 属性,然后比较这两个数字。

然后我们可以从产品ID在搜索结果中的products和product_properties中选择:

select ...
from products p
join product_properties pp on pp.pid = p.pid and pp.property in
(select property from property_groups where group_name = 'winterspecial')
where p.pid in
(
select pid
from product_properties
where property in
(select property from property_groups where group_name = 'winterspecial')
group by pid
having count(*) =
(select count(*) from property_groups where group_name = 'winterspecial')
);

关于php - MySQL 几个内部连接与子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32989452/

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