[英]SQL SELECT statement to pull data from multiple tables with foreign keys and associative relationships
我有以下表格:
Universities( iduni, uniname )
Campuses( idcampus, iduni, campusname, campusaddress )
Projects( idproject, idcampus, projectname )
IndustryCode( idindustrycode, codenumber, description )
Specialization( idspec, specname )
以下是一些上面列出的表的关联表
CampusSpecialization( idcampus, idspec )
ProjectSpecialization( idproject, idSpec )
ProjectIndustryCode( idproject,idindustrycode )
我想通过PHP生成具有以下结构的XML文件,但无法找出从数据库中提取数据的SELECT
语句。 数据是每个项目的校园,大学,项目,行业代码和专业化,以便我可以在以后基于此互连数据在我的小应用程序中过滤结果。
<items>
<item>
<campus campusname="$CAMPUSNAME" uniname="$UNINAME" campusaddress="$CAMPUSADDRESS">
<projects>
<project>
<name>$PROJECTNAME</name>
<specs>
<spec>$SPECNAME1</spec>
<spec>$SPECNAME2</spec>
...
</specs>
<industries>
<industry>$CODENUMBER1</industry>
<industry>$CODENUMBER2</industry>
...
</industries>
</project>
...
</projects>
</campus>
</item>
<item>
<campus ... >
<projects>
<project ... >
...
</project>
</campus>
</items>
到目前为止,这是我的SQL语句:
SELECT
campusname,
specname,
projectname
FROM
Specialization,Projects
JOIN CampusSpecialization ON CampusSpecialization.idspec = Specialization.idspec
JOIN Campuses ON CampusSpecialization.idcampus = Campuses.idcampus
JOIN ProjectSpecialization ON ProjectSpecialization.idspec = Specialization.idspec
编辑:
项目可能有一个或多个代码和行业。
尝试这个:
SELECT c.campusname,u.uniname,c.campusaddress, s.specname, ic.codenumber, p.projectname
FROM campuses c
INNER JOIN universities u ON u.iduni = c.iduni
INNER JOIN camousspecialization cs ON cs.idcampus = c.idcampus
INNER JOIN speicialization s ON s.idspec = cs.idspec
INNER JOIN projectspecialization ps ON ps.idproject = s.idspec
INNER JOIN projectindustrycode pi On pi.idproject = ps.idproject
INNER JOIN industrycode ic on ic.industrycode = pi.industrycode
INNER JOIN projects p on p.idproject = ps.idproject
没有经过测试,但这应该将所有校园与项目, 项目的 codeNumber和specName拉开。
注意,我不完全确定您的架构。 关联表意味着每个项目可能有多个代码和specNames。 而xml意味着每个项目只有一个。 此查询将为关联表中的每个条目返回一条记录。 即如果“项目A”有三(3)个规范,SELECT将返回三(3)条记录。
SELECT c.idCampus
, c.campusName
, c.campusAddress
, u.uniName
, p.projectName
, s.specName as ProjectSpecName
, ic.codeNumber AS ProjectCodeNumber
FROM Campuses c
INNER JOIN Universities u ON u.iduni = c.iduni
INNER JOIN Projects p ON p.idcampus = c.idcampus
INNER JOIN ProjectSpecialization ps ON ps.idproject = p.idproject
INNER JOIN Specialization s ON s.idspec = ps.idspec
INNER JOIN ProjectIndustryCode pic ON pic.idproject = p.idproject
INNER JOIN IndustryCode ic ON ic.idindustrycode = pic.idindustrycode
编辑:不幸的是,我不使用PHP。 所以我不知道在php中生成xml的最佳或标准方法。 您可以在SELECT中使用group_concat来返回每个项目的代码和名称的连接列表。 然后将这些字符串拆分为php中的数组,并使用数组计数生成所需数量的xml元素。
SELECT c.idCampus
, c.campusName
, c.campusAddress
, u.uniName
, p.projectName
, GROUP_CONCAT(s.specName SEPARATOR '|') as SpecNameList
, GROUP_CONCAT(ic.codeNumber SEPARATOR '|') AS CodeNumberList
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.