0

次のテーブルがあります

製品

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

Product は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 つが必要ですが、充電器の下では最後の 1 つだけが表示されます。

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爆発で爆発させることができます

于 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 に答える