MySQL加入 - 将类别表与数据表结合起来

时间:2012-04-09 05:30:28

标签: php mysql inner-join

我有一个表category,它将类别编号与类别名称相关联。 例如,1-水果,2种蔬菜,3种昆虫,4种城市等......

我有另一张表item,其中的项目只属于一个类别。每个项目都有唯一的ID,名称及其类别。例如,314-Pumpkin-(类别)1

简而言之:

category
-------
c_id   (int)
c_name (varchar)

item
-------
i_id   (int)
i_name (varchar)
i_cat  (int)

问题是并非所有类别都有项目。我已经使用以下内容来获取按类别排序的项目:

$STH = $DBH->prepare("SELECT * FROM item ORDER BY i_cat");

这是内置在一个表格中,随着猫(猫)的变化而提取标题。当然,没有项目的类别也不会被提取。

我想要的是一个包含所有类别(甚至没有实际项目的类别)并在每个类别下面列出正确项目的表格。

我可以设计一些繁琐的方法来做我想要的,但必须有一个简洁的解决方案。如何在一次调用中加入两个表中的数据,以便每个类别和每个项目都存在?我认为它涉及inner join的使用,但我看不出如何有效地做到这一点。

感谢。

2 个答案:

答案 0 :(得分:2)

尝试以下查询,它将获取category表中的所有类别以及item表中的相应项:

SELECT * 
FROM category c
LEFT JOIN item i
ON c.c_id = i.i_cat
ORDER BY i_cat

答案 1 :(得分:2)

实际上,它不是inner join您正在寻找的东西。 inner join将获取所有匹配值并删除不匹配的值。 left join将从左侧的表中获取值,并尝试使用右表中的值将它们连接起来。如果左表中的一行在右表中没有匹配项,则这些值将使用NULL填充。

尝试此查询:

select * from category
left join item on c_id = i_id
order by i_cat