2012-06-27 15 views
2
brand(id, parent_id, name) 
     1 |  0 | Apple 
     2 |  0 | Samsung 
     3 |  1 | Iphone 3S 
     4 |  1 | Iphone 4S 
product(id, name) 
     1 | OS 
     2 | Andriod 
product_brand(product_id, brand_id) 
        1  | 3 
        1  | 4 

和MySQL: 如何獲得product namebrand name = Apple如何讓所有的產品在father_id在PHP MySQL的

SELECT * FROM product_brand 
LEFT JOIN brand ON brand.id = product_brand.brand_id 
WHERE brand.id = 1 // Apple 

例如:如果獲得蘋果(ID = 1)結果=> OS,如果獲得三星(ID = 2)結果=>的Andriod

+0

我沒有看到一個真正的問題在那裏。你期望的結果是什麼?另外,您的'product_brand'表缺少品牌1和2的行。 –

回答

1

試試這個:

SELECT 
    p.name 
FORM product p 
LEFT JOIN product_brand pb ON p.id = pb.product_id 
LEFT JOIN brand b ON pb.brand_id = b.id 
LEFT JOIN brand b1 ON b.id = b1.parent_id 
WHERE b1.name = 'Apple' 
1

你的意思像

SELECT 
    childbrand,name AS child_brand_name 
    product.name AS product_name 
FROM brand AS childbrand 
INNER JOIN brand AS parentbrand ON parentbrand.id=childbrand.parent_id 
INNER JOIN product_brand ON product_brand.brand_id=childbrand.id 
INNER JOIN product ON product_brand.product_id=product.id 
WHERE parentbrand.name='Apple'; 
1

如果您想獲取未存儲在product_brand(請參閱示例數據)中的Apple和Samsung專用產品名稱。你可以解決如下查詢:

SELECT *, 
    CASE b.name WHEN 'Apple' THEN 'iOS' 
    WHEN 'Samsung' THEN 'Android' ELSE '-' END 
    FROM 
    brand b 

編輯2: 如果你想獲得基礎上,PARENT_ID所有的產品名稱。可以嘗試以下:

SELECT *, 
    CASE b.name WHEN 'Apple' THEN 'iOS' 
    WHEN 'Samsung' THEN 'Android' ELSE '-' END as type_of_os 
FROM 
    brand b 
WHERE parent_id=0 
UNION 
SELECT 
    b.*, 
    CASE b2.name WHEN 'Apple' THEN 'iOS' 
    WHEN 'Samsung' THEN 'Android' ELSE '-' END as type_of_os 
FROM 
    brand b 
INNER JOIN 
    brand b2 ON b.parent_id = b2.id 

http://sqlfiddle.com/#!2/1f573/18