2011-06-04 64 views
0

顯示的行我有兩個表,即「類」 &「產品」如下:PHP如何從兩個表

categories 
id | name 

products 
id | cat_id | name 

CAT_ID產品中引用的類別表。

現在,我想要顯示頁面上所有產品的列表,這些列表還必須顯示產品所屬類別的名稱(而不是cat_id)。 我在PHP很新的,所以我做了以下的方法:

foreach($products as $product): 
     echo $product->id . $product->name; 
     echo getCategoryName($product->cat_id); 
    endforeach; 

其明顯的數據庫調用來檢索對應的類別名稱等於產品的數量來顯示,而東西告訴我這一點都不好。

那麼,有沒有更好的方法來做到上述?也許通過使用SQL JOIN?

回答

4

您應該使用SQL連接,這是迄今爲止從兩個表中選擇數據的最佳和最簡單的方法。

SELECT 
    p.id AS id, c.name AS category, p.name AS name 
FROM 
    products AS p LEFT JOIN categories AS c ON p.cat_id = c.id 

您也可以使用Trevor的聲明,但這是不同類型的連接。只要產品ID始終存在,這兩種情況都可以在這種情況下起作用。

更新:LEFT JOINRIGHT JOIN上稍作更新。當你從2個表中選擇時,你有一個左右表(產品在這裏,類別是正確的)。即使該類別不存在,我給你的查詢也會匹配所有產品。 A RIGHT JOIN將匹配所有類別,即使該類別中沒有產品。

+0

@kilZone,它是一樣的連接。只是一個不同的語法。 – Johan 2011-06-04 19:27:24

+0

@KilZone,在這種情況下使用'LEFT JOIN'時,如果該類別不存在,會顯示什麼? – WebNovice 2011-06-04 19:28:08

+0

它是否也包含像沒有與'cat_id'關聯的類別的東西?例如,當它從數據庫中刪除(通常你會通過外鍵強制執行)。另一種方式呢?無論如何,我會說**總是**使用明確的JOIN,因爲你有更多的控制權。 – KilZone 2011-06-04 19:32:05

0

是的,你需要一個sql連接。類似這樣的:

類別id |名稱

商品id | cat_id |名稱

select categories.name, products.id, products.name 
from categories, products 
where categories.id = products.cat_id 
+0

-1,1989呼叫。他們希望隱式的'where'加入語法回來。請使用顯式連接語法。 – Johan 2011-06-04 19:26:06

+0

aww他是一位嘗試幫助的新用戶...不要立即將他殺死 – dynamic 2011-06-04 19:28:28

+0

謝謝,這也很有效。 – WebNovice 2011-06-04 19:30:37