首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL/PHP作为集合从多个表返回和显示数据

MYSQL/PHP作为集合从多个表返回和显示数据
EN

Stack Overflow用户
提问于 2013-11-13 03:24:35
回答 2查看 2.1K关注 0票数 3

我加入了四个表,希望返回表lab_test中属于lab_test_group的所有行,并将它们显示为(组以粗体.):

肌酐清除

肌酐(液体)

肌酐(24小时尿)

甲状腺功能试验(1)

自由T4

促甲状腺激素

有相关数据的表格结构如下:

lab_test

代码语言:javascript
复制
+-------------+-----------------------------+
| lab_test_pk |          lab_test           |
+-------------+-----------------------------+
|         191 | Creatinine (Fluid)          |
|         208 | Free T4                     |
|         782 | Creatinine (24 hour Urine)  |
|        1161 | Thyroid Stimulating Hormone |
+-------------+-----------------------------+

model_lab_test_lookup

代码语言:javascript
复制
+--------------------------+-------------+------------+
| model_lab_test_lookup_pk | lab_test_fk | pathway_fk |
+--------------------------+-------------+------------+
|                       26 |           2 |         90 |
|                       27 |           8 |         90 |
+--------------------------+-------------+------------+

lab_test_group

代码语言:javascript
复制
+-------------------+----------------------------+
| lab_test_group_pk |         group_name         |
+-------------------+----------------------------+
|                 2 | Creatinine clearance       |
|                 8 | Thyroid function tests (1) |
+-------------------+----------------------------+

lab_test_group_lookup

代码语言:javascript
复制
+--------------------------+-------------------+--------------+
| lab_test_group_lookup_pk | lab_test_group_fk |  lab_test_fk |
+--------------------------+-------------------+--------------+
|                        6 |                 2 |          191 |
|                        7 |                 2 |          782 |
|                       41 |                 8 |          208 |
|                       42 |                 8 |         1161 |
+--------------------------+-------------------+--------------+

我使用的查询是:

代码语言:javascript
复制
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。

显示以下代码:

代码语言:javascript
复制
<?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只返回一个记录,而不是每个lab_test_group的两个lab_tests。

问题是我如何在相关的lab_test_group下得到所有的实验室测试结果?每组两人。

注:

表中的lab_test_fk model_lab_test_lookup用于保存单个lab_test行的键,以及lab_test_group的键。

EN

回答 2

Stack Overflow用户

发布于 2013-11-13 03:52:24

你把桌子的结构弄得有点过火了。没有必要只使用主键和外键“链接”表。但是那列火车已经过了,我们会对它视而不见。对您拥有的内容使用以下SQL语句:

代码语言:javascript
复制
SELECT * FROM 
lab_test_group AS ABB2
   JOIN lab_test_group_lookup AS ABB1 ON ABB1.lab_test_group_fk = ABB2.lab_test_group_pk
      JOIN model_lab_test_lookup AS ABB3 ON ABB3.lab_test_fk = ABB2.lab_test_group_pk
        JOIN lab_test AS ABB4 ON ABB4.lab_test_pk = ABB1.lab_test_fk
WHERE ABB3.pathway_fk = $pathway_pk;

在这样复杂的查询中使用实际的联接运算符,而不是将所有链接放在WHERE语句中,这是非常有利的。你就能更好地描绘桌子之间的关节了。

SQLFiddle 这里上的工作实例

票数 1
EN

Stack Overflow用户

发布于 2013-11-14 05:33:26

希望这是有帮助的:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19944667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档