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

編集:

プロジェクトには、1 つまたは複数のコードと業種が含まれる場合があります。

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がプルされます。

注意してください、私はあなたのスキーマについて完全に確信していません。連想テーブルは、プロジェクトごとに複数のコードとspecNameが存在する可能性があることを意味します。xmlは、プロジェクトごとに1つしかないことを意味します。このクエリは、連想テーブルのエントリごとに1つのレコードを返します。つまり、「プロジェクト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 に答える