我有一张名为 Workshop 的表,还有一张名为 Workshop_parts 的表。
Workshop_parts 中的每一行都包含一个父 ID,该 ID 引用其父工作室,以及该部件的各种其他数据。
我正在尝试找出在网站上检索和显示所有数据的最有效方法。
我想列出研讨会信息,然后列出下面的所有部分。
根据我现在所知道的,我将遍历所有的研讨会,然后有一个嵌套循环遍历所有部分。
有什么方法可以让我使用连接一举获取所有数据,还是嵌套循环是最好的解决方案?
根据这个 SO post,我会将其作为实际的 JOIN:
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);
Left JOIN 将带您到任何存在车间 ID 的地方,但会忽略没有匹配车间的部分。
INNER JOIN 将只为您提供具有匹配项的车间和零件(没有零件的车间不会显示,没有车间的零件也不会显示)
RIGHT JOIN 将只为您提供带有零件的车间和任何其他零件,即使他们没有车间。
编辑 这是我发现的最好的思考方式: http: //www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
使用连接......它看起来像这样
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);
SQL 将是一个不错的选择,因为您将以编程方式为每个研讨会 ID 调用数据库。最好一次获取所有数据,然后将其显示在页面上,从而减少数据库调用。
这里是sql。
select workshop.id, workshop_parts.*
from workshop
left join workshop_parts
on workshop.id=workshop_parts.workshop_id
希望这可以帮助。