我正在建立一个机构之间协议登记申请。这些协议可能包括2个以上的合作伙伴。因此,我很快就放弃了在合同表中使用part1和partner2的想法。
目前的设计是(注:简化问题):
Table Institutes: ID, Name , ..
Table Contract_institutes: ContractID, InstituteID
Table Contracts: ID, Title, ...
如果您认识一个合作伙伴,我将如何展示所有合同的清单,包括相关合作伙伴:用户已登录,并希望查看其所在机构的所有合同以及合同中的所有合作伙伴; e.g:
我可以先获得所有合同ID
select *fields*
from Contracts
left join Contract_institutes on Contracts.ID = Contract_institutes.ContractID
where Contract_institutes.InstituteID = *SomeValue*
然后让所有相关机构对每个合同进行单独查询(或者在查询中使用IN语句),并使用大量foreach php循环进行格式化。不漂亮,可能效率不高。
必须有更好的方法来执行此操作,并在单个sql语句中获取列表。有人能帮我吗?
理想情况下,我得到输出行:[合同ID] [InstituteID] [Institute.Name]。我可以在输出中的每个合约视图中轻松修改它。
PS: - 这是应用程序的设计阶段:数据库为空,可以根据需要进行修改。
答案 0 :(得分:1)
select C.ID, I.ID, I.Name
from Contracts C
join Contract_institutes CI on C.ID = CI.ContractID
join Institutes I on I.ID=CI.InstituteId
where CI.InstituteID <> *SomeValue*
and CI.ContractID in (select CI2.ContractId
from Contract_institutes CI2
where CI2.InstituteID = *SomeValue*)