我有一个名为workshop的表,另一个名为workshop_parts的表。
workshop_parts中的每一行都包含一个父ID,该ID引用其父研讨会,以及该部分的各种其他数据。
我正在尝试找出检索和显示网站上所有数据的最有效方法。
我想列出研讨会信息,然后列出以下所有部分。
根据我现在所知,我只是遍历所有研讨会,然后有一个循环遍历所有部分的嵌套循环。
我是否有某种方式可以使用连接一次获取所有数据,或者嵌套循环是最佳解决方案?
答案 0 :(得分:2)
根据这篇SO帖子,我会把它作为一个实际的JOIN:
SQL left join vs multiple tables on FROM line?
select ws.name as ws_name, part.name as part_name, part.qty as part_quantity from workshop ws LEFT JOIN workshop_parts parts ON (ws.id = parts.workshop_id);
左边JOIN会让你在任何地方存在一个工作室ID,但遗漏了没有匹配工作室的部分。
INNER JOIN将只为您提供匹配的车间和零件(没有零件的车间不会展示,没有车间的车间也不会展示)
RIGHT JOIN将为您提供零件和任何其他零件的车间,即使他们没有车间。
修改强> 这是我发现的最佳方式: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
答案 1 :(得分:1)
使用联接...它看起来像这样
select ws.name as ws_name, part.name as part_name, part.qty as part_quantity from workshop ws, workshop_parts parts where (ws.id = parts.workshop_id);
答案 2 :(得分:0)
SQL将是一个不错的选择,因为从编程方面来说,您将为每个研讨会ID调用数据库。更好地一次获取所有数据,然后将其显示在页面上,从而减少数据库调用。
这是sql。
select workshop.id, workshop_parts.*
from workshop
left join workshop_parts
on workshop.id=workshop_parts.workshop_id
希望这有帮助。