gpt4 book ai didi

php - 具有多个连接的复杂连接查询

转载 作者:行者123 更新时间:2023-11-29 14:05:16 26 4
gpt4 key购买 nike

我有下表

产品

id                      int(11)         AUTO_INCREMENT                                                  
name varchar(254)
product_category_id int(11)

产品属于ProductCategories中的a类别。一个类别有子类别(自连接)

id                      int(11)         AUTO_INCREMENT                                                  
name varchar(254)
parent_id int(11)

产品还具有存储在 ProductMedia 中的图标。

id                      int(11)         AUTO_INCREMENT                                                  
url varchar(254)
type enum('icon','banner','video')
product_id int(11)

获取属于某个类别的具有关联图标的所有产品(包括其子类别中的产品(如果有))的最有效方法是什么。

示例:

Product  
1. iphone - Mobile(category)
2. sIII - Mobile (category)
3. liginting connector - Cable(category)
4. iPhone USB charger - Charger(category)

ProductCategories
1. Mobile - 0(parent)
2. Cables - 1(parent)
3. Sim - 1
4. Shoes - 0
5. Chargers - 2

当我搜索移动类别时,它需要为我提供所有 4 个产品,在电缆下它需要提供最后 2 个产品,但在充电器下仅提供最后一个

最佳答案

为此使用联接

SELECT 
p.*,
pc.name,
pm.url,
pm.type
FROM Product as p
LEFT JOIN ProductMedia as pm ON pm.product_id = p.id
LEFT JOIN ProductCategories as pc ON pc.id = p.product_category_id

你可以这样做
编辑:

select
p.name,
ifnull(pc.Category,pc.name) as Category,
pm.type
from product as p
left join (select
l.id as id,
l.name,
l.parent_id,
if(r.parent_id <> 0,l.name, CONCAT(l.name,'|',r.name )) as Category
from productcategories as l
left join productcategories as r
on r.id = l.parent_id) as pc
on pc.id = p.id
left join productmedia as pm
on pm.product_id = p.id

输出

name                        |   Category            |   type 
----------------------------------------------------------------
iphone | Mobile | banner
sIII | Charger|Mobile | icon
iphone liginting connector | HeadPhones|Mobile | video

您可以使用 phpexplode 来爆炸类别

关于php - 具有多个连接的复杂连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472382/

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