繁体   English   中英

用相同ID的PHP组合MySQL行

[英]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,而应考虑改用mysqlipdo

在这里,您必须运行两个单独的查询。 在第一个查询中,您必须找到所有不同的客户名称,最好使用客户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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM