2012-07-26 96 views
2

對於MySQL和關係數據庫,我是一個新手,但我正在開發的一個項目需要我編寫一些複雜的SELECT語句,在這一點上我有點困惑。我有三個表格存儲有關各種產品的信息。 Table1存儲每個產品的頁面內容,table2存儲關於每個產品的具體標準(模型,材料,顏色等),table3是建立T1和T2之間多對多關係的鏈接表。SELECT語句細化

這是我的選擇語句是給我:

Array 
(
    [name] => color 
    [value] => Red 
    [title] => Product 1 
) 
Array 
(
    [name] => material 
    [value] => Wood 
    [title] => Product 1 
) 

我很困惑,我怎麼可能會選擇那些產品,例如,無論是「紅」,「wood',主要有紀錄每個產品和他們的描述。

Array 
(
    [material] => Wood 
    [color] => Red 
    [title] => Product 1 
) 

SELECT語句:

SELECT table2.name, table3.value, table1.title 
FROM table2 

INNER JOIN table3 
ON table2.id=table3.varid 

INNER JOIN table1 
ON table1.id=table3.contentid 

回答

1

你必須重新加入到其他表。你需要別名表區分它們分開:

SELECT table2.name, table3.value, table1.title, t3.value, t1.title 
FROM table2 
JOIN table3 ON table2.id=table3.varid and value = 'Wood' 
JOIN table1 ON table1.id=table3.contentid 
JOIN table3 t3 ON table2.id=t3.varid and value = 'Red' 
JOIN table1 t1 ON t1.id=t3.contentid; 

你可以把測試值WHERE子句中,但由於謂詞作爲執行這種方式更有效的連接而成,而比之後的整個聯接結果。

注意INNER JOINJOIN意義相同(INNER隱含)

+0

謝謝!我用表來表示別名。現在它似乎更接近了,但它現在不返回任何頁面。它至少應該返回一對紅色和伍德的值 – Vecta 2012-07-26 20:31:13