1

ご挨拶と私の質問を読んでいただきありがとうございます。

まず、下の図は、私が作成しているデータベースの一部を示しています。私の目標は(これを行うためのより良い方法がない限り)、通常は「schedule_name」や「schedule_description」などと呼ばれるフィールドの複数の言語を別のテーブルでサポートすることです。PS-この図の列タイプのラベルが正しくないことはわかっています。

データベース

ご覧のとおり、ボート、クルーズ、スケジュールにはそれぞれ外部キーとして言語IDがあります。クルーズとボートでスケジュール記録を引き出したい場合、どうすればいいですか?

テーブルを問題なく結合し、列エイリアスを並べ替えましたが、各エイリアスに正しい詳細を取得したいと思います。明確にするために

スケジュールには、language_id=1を使用して選択するための独自のlanguage_language_id参照があります。language_name_enは-月曜日の朝

Cruiseには、language_id=2を使用して選択するための独自のlanguage_language_id参照があります。language_name_enは--SunnyHaze

ボートには、language_id=3を使用して選択するための独自のlanguage_language_id参照があります。language_name_enは--BlueDolphin

この質問へのコメントに答える; enは英語、zhsは簡略化された中国語、zhtは繁体字中国語です。これらは、このシステムが動的データをサポートするための言語です。このようなテーブルをレイアウトして、言語の処理のみを担当するユーザータイプが存在できるようにすると便利だと思いました。スケジューリングテーブルを処理する必要はありません。

これまでのところ、後で示すように、サンプルレコードを取得するためのクエリは次のようになります。

SELECT 
   schedule_id,
   s.language_name_en as schedule_name_en,
   l.language_name_zhs as schedule_name_zhs,
   l.language_name_zht as schedule_name_zht,
   schedulesafename,
   schedule_expected_arrival,
   schedule_expected_departure,
   cruise_id,
   c.language_name_en as cruise_name_en,
   c.language_name_zhs as cruise_name_zhs,
   c.language_name_zht as cruise_name_zht 
   FROM
      schedule as s 
   INNER JOIN
      language as l 
         ON s.language_language_id = l.language_id
   INNER JOIN
      cruise as c
         ON c.language_language_id = l.language_id
   Where
      schedule_id = 1;

リストされたクエリを使用して返されるもののサンプルデータを次に示します。

scheduleid - 1
schedule_name_en - monday morning
schedule_name_zhs - 星期一的早晨
schedule_name_zht - 星期一的早晨
schedule_safename - pwupglfkpmwcbkgzhmzxrqfeqzlhvaed 
schedule_expected_arrival - 1353138308
schedule_expected_departure - 1353139218
cruise_id - 1 
cruise_name_en - Sunny Haze
cruise_name_zhs - 彩霞
cruise_name_zht - 彩霞
cruise_safename - bbhdrunzdmftyvhprefvogysgfrtnkgm 

これにより、データベースからデータを取得する方法がわかります。私の主な問題は、同じクエリで言語レコードをどのようにリッピングするかです。私の質問を読んでくれてありがとう。

4

1 に答える 1

4

私はあなたが非常に近いと思います、あなたはそれが行くそれぞれのテーブルのために異なるエイリアスで同じ言語テーブルを再利用する必要があります...のようなもの

SELECT 
      S.schedule_id,
      SL.language_name_en as schedule_name_en,
      SL.language_name_zhs as schedule_name_zhs,
      SL.language_name_zht as schedule_name_zht,
      schedulesafename,
      S.schedule_expected_arrival,
      S.schedule_expected_departure,
      C.cruise_id,
      CL.language_name_en as cruise_name_en,
      CL.language_name_zhs as cruise_name_zhs,
      CL.language_name_zht as cruise_name_zht 
   FROM
      schedule as s 
         INNER JOIN language as SL 
            ON s.language_language_id = SL.language_id
         INNER JOIN cruise as c
            on s.Cruise_Cruise_ID = c.Cruise_Id
            INNER JOIN language as CL 
               ON c.language_language_id = CL.language_id
   Where
      S.schedule_id = 1;

最初に、スケジュール言語IDの結合で言語に結合されたスケジュール(エイリアスS)(最初はスケジュール言語の「SL」としてエイリアス化されます)に注意してください。

次に、スケジュールはCruiseIDのCRUISEに参加します。

最後に、CRUISEテーブルはCRUISE言語ID値によって言語テーブル(今回はCruise Languageのエイリアス「CL」)に結合されます。

これで、同じテーブルソースが2回あり、それぞれを引き出しようとしている「言語ID」要素ごとになります。

于 2012-11-17T07:55:44.953 に答える