結合する 4 つのテーブルがあり、lab_test_group に属するテーブル lab_test のすべての行を返し、それらを次のように表示したいと考えています (太字のグループ...):
クレアチニンクリアランス
クレアチニン(体液)
クレアチニン(24時間尿)
甲状腺機能検査 (1)
無料 T4
甲状腺刺激ホルモン
関連データを含むテーブル構造は次のとおりです。
lab_test
+-------------+-----------------------------+
| lab_test_pk | lab_test |
+-------------+-----------------------------+
| 191 | Creatinine (Fluid) |
| 208 | Free T4 |
| 782 | Creatinine (24 hour Urine) |
| 1161 | Thyroid Stimulating Hormone |
+-------------+-----------------------------+
model_lab_test_lookup
+--------------------------+-------------+------------+
| model_lab_test_lookup_pk | lab_test_fk | pathway_fk |
+--------------------------+-------------+------------+
| 26 | 2 | 90 |
| 27 | 8 | 90 |
+--------------------------+-------------+------------+
lab_test_group
+-------------------+----------------------------+
| lab_test_group_pk | group_name |
+-------------------+----------------------------+
| 2 | Creatinine clearance |
| 8 | Thyroid function tests (1) |
+-------------------+----------------------------+
lab_test_group_lookup
+--------------------------+-------------------+--------------+
| lab_test_group_lookup_pk | lab_test_group_fk | lab_test_fk |
+--------------------------+-------------------+--------------+
| 6 | 2 | 191 |
| 7 | 2 | 782 |
| 41 | 8 | 208 |
| 42 | 8 | 1161 |
+--------------------------+-------------------+--------------+
私が使用しているクエリは次のとおりです。
SELECT *
FROM lab_test_group,
lab_test_group_lookup,
model_lab_test_lookup,
lab_test
WHERE lab_test_group.lab_test_group_pk = model_lab_test_lookup.lab_test_fk
AND lab_test_group_lookup.lab_test_group_fk = lab_test_group.lab_test_group_pk
AND lab_test_group_lookup.lab_test_fk = lab_test.lab_test_pk
AND model_lab_test_lookup.pathway_fk = '$pathway_pk'
GROUP
BY lab_test_group.lab_test_group_pk
この例では$pathway_pk
== 90 です。
表示する次のコードを使用します。
<?php
while ($row_lab_test_groups = mysql_fetch_assoc($result_lab_test_groups)){
$test_groups_array[] = $row_lab_test_groups;
echo "<tr><td colspan='5'>" . $row_lab_test_groups['group_name'] . "</td></tr>";
foreach($test_groups_array as $r){
echo "<tr><td>" . $r['lab_test'] . "</td></tr>";
}
}
?>
これで次が返されます。
クレアチニンクリアランス -
クレアチニン(体液)
甲状腺機能検査 (1) -
クレアチニン(体液)
フリー T4
問題の一部は、lab_test_group ごとに 2 つの lab_tests ではなく、lab_test ごとに 1 つのレコードのみが返される GROUP BY です。
問題は、関連する lab_test_group の下に表示されるすべてのラボ テストを取得するにはどうすればよいかということです。つまり、各グループに 2 つずつです。
ノート:
テーブル model_lab_test_lookup の lab_test_fk は、個々の lab_test 行のキーと lab_test_group のキーを保持するために使用されます...