2014-04-14 55 views
0

我有3個表項,特徵,item_to_characteristics其中item_to_characteristics是保持2個表(項< - >特徵)之間的HABTM關聯的中間表。加入JOIN和HABTM協會的三個表

項目表有ID |標題|描述

特徵表有ID |名稱| PIC_PATH

item_to_characteristic有ID | ITEM_ID | characteristic_id

所以例如:項目與ID 25我想找到它的所有特點。

表item_to_characteristics看起來是這樣的:

Item_to_characteristic table picture

所以當你看到item_to_characteristic按住項目和它的特性的ID。

這是查詢到目前爲止,我已經writen但doesent回到我想要什麼,

SELECT item_characteristics.name, item_characteristics.icon_path 
FROM item_characteristics, item_to_characteristics as itch INNER JOIN items 
ON items.id=itch.item_id 
WHERE items.id=25; 

查詢應只返回5行。

回答

2

你已經加入表item_to_characteristics這就是爲什麼你得到更多的行比你期望的。相反,你應該內連接到item_to_characteristics

SELECT ic.name, ic.icon_path 
FROM item_characteristics ic 
     INNER JOIN item_to_characteristics as itch 
      ON itch.characteristic_id = ic.id 
     INNER JOIN items 
      ON items.id=itch.item_id 
WHERE items.id = 25; 

這是我一直建議使用ANSI 92聯接語法,而不是你在上面使用ANSI 89語法的原因之一。 Aaron Bertrand在this article中也提出了一個非常引人注目的案例。

+1

感謝很多人......這非常有幫助......你救了我的一天。 – landi