問題
2 つのデータ テーブルがSEQUENCESあり、ORGANISMSその多対多の関係は table に mappend されていますSOURCES。と の間にも 1 m の関係がSOURCESありENTRIESます。詳細な構造を追記します。
私が達成したいのは、シーケンステーブル内の条件が満たされた、すべての関連生物とエントリを含むすべてのシーケンスの表示です。これを達成する方法についていくつかのアイデアがありますが、それぞれに 50k 以上のエントリが含まれているため、最高のパフォーマンスを発揮するソリューションが必要です。
アイデア1
SQLで連結文字列と同じ配列に属するすべての生物を選択し、PHPで分割します。ただし、SQLで連結を行う方法はわかりません。
アイデア2
異なる生物を含む同じシーケンスを個別のレコードとして選択し、生物ごとに並べ替え、後でそれらを php.ini で結合します。これはどういうわけか間違っているように感じますが。
アイデア3
ビューを使用します。これに関する任意のアイデアを高く評価
構造
SEQUENCES
  SEQUENCE_ID
  DESCRIPTION
ORGANISMS
  ORGANISM_ID
  NAME
SOURCES
  SOURCE_ID
  SEQUENCE_ID FK to SEQUENCES.SEQUENCE_ID
  ORGANISM_ID FK to ORGANISMS.ORGANISM_ID
ENTRIES
  SOURCE_ID FK to SOURCES.SOURCE_ID
  ENTRY_VALUE
望ましい結果
array(
  array(
    "SEQUENCE_ID" => 4,
    "DESCRIPTION" => "Some sequence",
    "SOURCES" => array(
      array(
        "ORGANISM_ID" => 562,
        "ORGANISM_NAME" => "Escherichia coli",
        "ENTRIES" => array(
          "some entry",
          "some other entry"
        ),
      array(
        "ORGANISM_ID" => 402764,
        "ORGANISM_NAME" => "Aranicola sp. EP18",
        "ENTRIES" => array()
      )
    )
  ),
  array(
    "SEQUENCE_ID" => 5,
    .....
  )
)
PHP5 と FIREBIRD2.5.1