0

我昨天真的开始学习 PHP / MySQL,所以如果这是一个简单/愚蠢/措辞不当的问题,我深表歉意。

我有一个带有两个表的数据库:

地点

l_id | loc_name
----------------
1    | France
2    | London
3    | The Moon

项目

i_id | item_name | item_loc
----------------------------
1    | Book      | 1
2    | Mirror    | 1
3    | Bread     | 2
4    | Camera    | 2
5    | Cheese    | 3
6    | Ladle     | 3

当提供 l_id 编号列表时,我如何才能最好地找到 loc_name 和分配给每个编号的所有项目?

这可以通过单个查询来完成,还是我需要查询两次 - 一次用于名称,一次用于项目?

另一方面,我在其他查询中使用 JOIN 取得了一些非常小的成功,但我真的不明白他们为什么工作。我很难弄清楚幕后的过程是什么以及语法如何描述它。如果有人可以推荐任何关于这个主题的阅读材料,那就太好了。

谢谢你的帮助,如果问题有点抱歉

4

3 回答 3

1

在阅读材料方面,从 O'Reilly学习 SQL是一个很好的起点。如果您更喜欢免费资源,那么W3Schools SQL 教程很好地介绍了基础知识。我发现使用更完整的语法和显式连接可以更容易地理解正在发生的事情。因此,在您的示例中,类似于:

SELECT *
FROM locations AS loc
INNER JOIN items AS i
ON loc.l_id = i.item_loc
WHERE loc.l_id IN (value1,value2,...)
于 2013-04-12T09:52:28.920 回答
1

应该工作:

SELECT items.i_id, items.item_name, location.loc_name FROM items LEFT JOIN locations ON l_id =  items.item_loc
于 2013-04-12T09:52:29.953 回答
0

由于 l_id 和 item_loc 是相同的属性,我们可以在两个表上执行内连接。

    select l.loc_name,i.item_name 
    from Items i inner join Locations l
    on i.item_loc=l.l_id

基本上,它将通过映射公共属性值(此处为 item_loc 和 l_id)来组合两个表。我们得到另一个带有属性的表(i_id,item_name,item_loc,loc_name)。

于 2013-04-12T09:59:25.620 回答