我有两张桌子,即'类别'和'产品'如下:
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?
答案 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 JOIN
和RIGHT 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