循环执行连接查询
问题描述:
我有一个查询,它输出以下数据:循环执行连接查询
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)
它继续以同样的格式...
答
希望这回答了你的问题:
<?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
你可以粘贴你的查询输出与print_r($查询)我想我得到了答案,但我不知道那个 – xsami 2015-04-02 16:13:18
总是会有只有2'Customer_type',他们将永远是'女士们'//'Mens'? – Sean 2015-04-02 16:25:18
@xsami谢谢,我已经从mysqli_fetch_all()添加了查询的格式化版本。需要帮助请叫我。 – 2015-04-02 21:42:16