循环执行连接查询

问题描述:

我有一个查询,它输出以下数据:循环执行连接查询

Treatment ID --------- Treatment_Name ---------- Customer_type 
1      Treatment 1    Ladies 
1      Treatment 1    Mens 
3      Treatment 2    Ladies 
4      Treatment 3    Mens 

我需要循环这个输出的结构类似于此:

<div class="mens ladies"> <!-- these are read from the customer_type column --> 
    <h4>Treatment 1</h4> <!-- this is read from the treatment_name column --> 
</div> 

所以基本上分组通过治疗名称(或ID),然后输出所有与这种治疗有关的顾客。

来自ColdFusion背景我认​​为这将很容易与查询查询等,但我一直在努力提出一个PHP解决方案。

我试着做一个while循环,只显示数据,如果治疗名称已更改似乎工作正常,但我不知道如何显示与此相关的customer_types。

任何想法?谢谢。

编辑 下面是一个使用mysqli_fetch_all从数据库返回的查询的副本:

array (size=22) 
    0 => 
    array (size=3) 
     0 => string 'Mens' (length=4) 
     1 => string '1' (length=1) 
     2 => string 'treatment 1' (length=11) 
    1 => 
    array (size=3) 
     0 => string 'Ladies' (length=6) 
     1 => string '1' (length=1) 
     2 => string 'treatment 1' (length=11) 
    2 => 
    array (size=3) 
     0 => string 'Kids' (length=4) 
     1 => string '2' (length=1) 
     2 => string 'treatment 2' (length=11) 
    3 => 
    array (size=3) 
     0 => string 'Ladies' (length=6) 
     1 => string '2' (length=1) 
     2 => string 'treatment 2' (length=11) 
    4 => 
    array (size=3) 
     0 => string 'Mens' (length=4) 
     1 => string '2' (length=1) 
     2 => string 'treatment 2' (length=11) 
    5 => 
    array (size=3) 
     0 => string 'Mens' (length=4) 
     1 => string '3' (length=1) 
     2 => string 'treatment 3' (length=11) 
    6 => 
    array (size=3) 
     0 => string 'Kids' (length=4) 
     1 => string '3' (length=1) 
     2 => string 'treatment 3' (length=11) 
    7 => 
    array (size=3) 
     0 => string 'Ladies' (length=6) 
     1 => string '3' (length=1) 
     2 => string 'treatment 3' (length=11) 
    8 => 
    array (size=3) 
     0 => string 'Ladies' (length=6) 
     1 => string '4' (length=1) 
     2 => string 'treatment 4' (length=11) 

它继续以同样的格式...

+0

你可以粘贴你的查询输出与print_r($查询)我想我得到了答案,但我不知道那个 – xsami 2015-04-02 16:13:18

+0

总是会有只有2'Customer_type',他们将永远是'女士们'//'Mens'? – Sean 2015-04-02 16:25:18

+1

@xsami谢谢,我已经从mysqli_fetch_all()添加了查询的格式化版本。需要帮助请叫我。 – 2015-04-02 21:42:16

希望这回答了你的问题:

<?php 
    $link = mysqli_connect("hostname","username","password","database","port") or die("Error " . mysqli_error($link)); 
    $query = "SELECT treatment_name,Customer_type from Treatments" or die("Error at.." . mysqli_error($link)); 
    $result = $link->query($query); 

    while($row = mysqli_fetch_assoc($result)) { 
     $data[] = $row; 
    } 
//I have used this sample array: Try and make your result set this way 
    $data = array(
       array('treatment_name'=>'Treatment1','Customer_type'=>'Mens'), 
       array('treatment_name'=>'Treatment1','Customer_type'=>'Ladies'), 
       array('treatment_name'=>'Treatment2','Customer_type'=>'Mens') 
      ); 
    foreach ($data as $key => &$value) { 
     $temp[$value['treatment_name']][$key] = $value['Customer_type']; 
    } 

    //echo "<pre>"; 
    //print_r($data); 
    //print_r($temp); 
    //die; 

    foreach($temp as $key => $value){ 
     echo "<div class = \""; 
     foreach($value as $key2 => $value2) 
      echo " ". $value2. " "; 
     echo "\"><h4>".$key."</h4></div></br>"; 
    }    
?> 
//Output 
<div class = " Mens Ladies "><h4>Treatment1</h4></div></br><div class = " Mens "><h4>Treatment2</h4></div></br> 

您可以使用注释行来检查数据并进行相应调整。 顺便说一下,这段代码直接打印输出为html,所以你的浏览器会渲染它。如果您想要内容,请右键单击页面并查看源代码!

+1

这将为返回的每一行创建一个'div'。我相信OP想要结合两个治疗的行。因此,使用示例数据,将有3个div,而不是4. – Sean 2015-04-02 17:53:35

+0

感谢您的答案MRazz,但是这会返回查询中每行的div,这意味着每个处理都有多个。我希望每个治疗名称只出现一次,并且有一个具有相同治疗名称值的所有行的所有customer_type值的类,即。 '

Treatment 1
' – 2015-04-02 21:49:53