3

我有以下表格:

  1. Universities( iduni, uniname )
  2. Campuses( idcampus, iduni, campusname, campusaddress )
  3. Projects( idproject, idcampus, projectname )
  4. IndustryCode( idindustrycode, codenumber, description )
  5. Specialization( idspec, specname )

以下是上面列出的一些表的关联表

  1. CampusSpecialization( idcampus, idspec )
  2. ProjectSpecialization( idproject, idSpec )
  3. 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

编辑:

项目可能有一个或多个代码和行业。

4

2 回答 2

1

试试这个:

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 
于 2012-05-01T16:54:51.160 回答
0

未经测试,但这应该会拉出所有带有项目的校园,以及项目的codeNumber 和 specName。

请注意,我不完全确定您的架构。关联表暗示每个项目可能有多个代码和规范名称。而 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
       ...
于 2012-05-01T19:23:49.363 回答