問題
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