我有一个表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
的使用,但我看不出如何有效地做到这一点。
感谢。
答案 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