0

我有以下表格

产品

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

产品属于ProductCategories中的一个 类别。一个类别有子类别(自加入)

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

Product 也有一个存储在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 个,但在充电器下只有最后一个

4

2 回答 2

1

为此使用连接

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 

您可以使用 php explode 展开 Category

于 2013-01-23T04:23:58.193 回答
0

根据我从你那里得到的问题,你想要这样的东西。

SELECT 
    p.*,
    m.url,
    m.type
FROM Product as p
LEFT JOIN ProductMedia as m ON m.product_id = p.id
LEFT JOIN ProductCategories as c ON c.id = p.product_category_id
where c.id='Mobile'
于 2013-01-23T06:14:00.867 回答