3

結合する 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 のキーを保持するために使用されます...

4

2 に答える 2

0

これが役立つことを願っています:

select * from lab_test as t1 
inner join lab_test_group_lookup as t2 
on t1.lab_test_pk = t2.lab_test_fk
inner join lab_test_group as t3 
on t3.lab_test_group_pk = t2.lab_test_group_fk
inner join model_lab_test_lookup as t4 
on t4.lab_test_fk = t3.lab_test_group_pk
where t4.pathway_fk = 90
order by t2.lab_test_group_fk
于 2013-11-14T05:33:26.757 に答える