PHP如何显示两个表中的行

时间:2011-06-04 19:13:50

标签: php mysql

我有两张桌子,即'类别'和'产品'如下:

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?

2 个答案:

答案 0 :(得分:4)

您应该使用SQL join,这是从两个表中选择数据的最佳和最简单的方法。

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个表中选择时,您有一个左右表(产品留在这里,类别是正确的)。我给你的查询将匹配所有产品,即使该类别不存在。即使该类别中没有产品,RIGHT JOIN也会匹配所有类别。

答案 1 :(得分:0)

是的,你需要一个sql连接。像这样:

类别ID |名称

产品ID | cat_id |名称

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