2016-06-21 68 views
1

我想显示只会重复一次的医生的名字,以及他的专业化的正确限制。我这里有我的查询php,mysql,html - 在HTML中正确显示SQL查询(联合)

select a.emp_fname,a.emp_lname,b.hcp_name, c.*, d.*,e.spec_type 
from ehr_employee a 
inner join ehr_c_hcp_emp c 
on a.emp_id=c.emp_id 
inner join ehr_hcp b 
on b.hcp_id=c.hcp_id 
inner join ehr_c_doc_spec d 
on d.emp_id=a.emp_id 
inner join ehr_specialization e 
on e.spec_id=d.spec_id 

尽管ehr_c_hcp_emp具有 hcp_emp_idemp_idhcp_id(连词为员工和HCP表)。
ehr_c_doc_specdoc_spec_idemp_idspec_id(联合为员工和专业化表)。为什么这是因为医生/员工可以在一个或多个不同的医院,并可以有一个或多个专业化。
上面显示该查询这个结果

emp_fname emp_lname hcp_name spec_type 
John  Doe   Hospital Cardio 
John  Doe   Clinic  Cardio 
John  Doe   Hospital Psych 
John  Doe   Clinic  Psych 

我写,而我的PHP,HTML代码,这样

<?php 
$sel_admin = "*The query above*"; 
$rs_admin = mysql_query($sel_admin); 
while($row = mysql_fetch_array($rs_admin)) 
{  
    echo" <tr class='gradeX'> "; 
    echo "<td>" .$row['emp_fname']." ".$row['emp_lname']. "</td>"; 
    echo "<td>" .$row['hcp_name']. "</td>"; 
    echo "<td>" .$row['spec_type']. "</td>"; 
    echo"</tr>"; 
} 
    ?> 

它只是产生就像上面

查询我想要在单排中实现这样的事情

John Doe Hospital Psych 
      Clinic  Cardio 



注:我也有这样的,我只是显示它像可视化

+1

因此,添加一些代码,只输出一个名称,如果它不同于前一行。 '$ prev = null; while(...){If($ prev!= $ cur_name){output name; $ prev = $ cur_name}}' –

+0

我认为这将显示在两个单独的行? – Noobster

+0

那么你需要更多的代码来计算它的数量,并发出适当的rowspan头文件。 –

回答

0

我个人的解决办法是创建简单的结果集生成,这样的事情很多数据。然后,你可以在行中做另一个foreach。问题是,你是否想为每条记录添加新行。因为@ marc-b的答案是正确的,并且适用于多页面。

$tableData = []; 
$sqlData = [ 
    0 => [ 
     'userId' => 3, 
     'name' => 'Joe', 
     'group' => 'Good' 
    ], 
    1 => [ 
     'userId' => 3, 
     'name' => 'Joe', 
     'group' => 'Bad' 
    ] 
]; 

foreach ($sqlData as $item) { 
    if (!isset($tableData[$item['userId']])) { 
     $tableData[$item['userId']] = [ 
      'name' => $item['name'], 
      'groups' => [] 
     ]; 
    } 

    $tableData[$item['userId']]['groups'][] = $item['group']; 
} 

$tableData = [ 
    3 => [ 
     'name' => 'Joe', 
     'groups' => [ 
      0 => 'Good', 
      1 => 'Bad' 
     ] 
    ] 
];