[英]Combing MySQL Rows With Same ID PHP
我有一个表格“ orders”,其中保存了网站上的所有订单。 它通过以下方式保存数据:
ID | Session_id | image | item | extra | customer_name
样品日期
12 | sdgfafjhsf | image1.jpg | coffee | milk | roger
13 | sdgfafjhsf | image1.jpg | muffin | jam | roger
14 | fjgjgsdfjg | image3.jpg | coffee | none | John
目前,我有PHP来访问数据库并逐一列出所有清单。
mysql_connect("localhost", "root", "") or die(mysql_error()) ;
mysql_select_db("store") or die(mysql_error()) ;
//Retrieves data from MySQL
$data = mysql_query("SELECT * FROM orders WHERE status ='ordered'") or die(mysql_error()); //Puts it into an array
while($info = mysql_fetch_array( $data ))
{
//Outputs the image and other data
Echo "$info[customer_name] <img src='cameras/$info[image]'/> : $info[item] with $info[extras] <br />";
}
理想情况下,我希望数据按会话ID分组。 因此,它将一次打印出客户的姓名和图像,然后再打印与之关联的所有项目。
例如。 罗杰,咖啡,牛奶,松饼,果酱
有任何想法吗? 谢谢!
好吧,试试这个
SELECT Session_id,image,item,extra,customer_name FROM orders WHERE status='ordered' group by Session_id,image,item,extra,customer_name
一种简单的方法是对SQL进行排序,以使您可以从每个会话中获得彼此相邻的所有条目,并且只需记住您获取的最后一个会话ID,即可知道是否应输出名称和图片。 这是一些伪代码来说明我的意思;
$data =
mysql_query("SELECT * FROM orders WHERE status ='ordered' ORDER BY session_id")
or die(mysql_error());
$last_session_id = "**DUMMY**"; // Set a dummy value to not match the first row
while($info = mysql_fetch_array( $data ))
{
if($info['session_id'] != $last_session_id)
{
//Outputs the image and other data if a new session_id has been found
echo "$info[customer_name] <img src='cameras/$info[image]'/> : $info[item] with $info[extras] <br />";
$last_session_id = $info['session_id'];
} else {
// Same session_id as last row, skip name and picture
echo "$info[item] with $info[extras] <br />";
}
}
作为附带说明,不建议使用mysql_*
数据库API,而应考虑改用mysqli
或pdo
。
在这里,您必须运行两个单独的查询。 在第一个查询中,您必须找到所有不同的客户名称,最好使用客户ID而不是客户名称,因为ID不能重复。 然后,在获得所有已订购商品的客户之后,对其进行循环迭代,并在内部循环中运行另一个查询,以再次通过客户ID或客户名称检索该客户的所有订单。
在while($info = mysql_fetch_array( $data ))
loop中,在其中打印输出的地方,可以将其添加到键为Session_ids的标准数组中。
然后调用echo $foo['sdgfafjhsf']
来获得一个带有db-entries的数组,您可以通过print进行相应枚举。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.