使用相同ID PHP编译MySQL行

时间:2013-06-06 07:11:12

标签: php mysql grouping

我有一个表“订单”,它保存了网站上的所有订单。它以下列方式保存数据:

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分组。因此,它会打印出客户名称和图像,然后打印出与之关联的所有项目。

例如。罗杰,咖啡,牛奶,松饼,果酱

有什么想法吗? 谢谢!

4 个答案:

答案 0 :(得分:0)

好好试试这个..

 SELECT Session_id,image,item,extra,customer_name FROM orders WHERE status='ordered' group by Session_id,image,item,extra,customer_name

答案 1 :(得分:0)

一种简单的方法是对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

答案 2 :(得分:0)

在这里你必须运行两个单独的查询。在第一个查询中,您必须找到所有不同的客户名称,如果您使用客户ID而不是客户名称,则更好,因为ID不能重复。然后在获得所有已订购商品的客户后,在循环中迭代它们并在内部循环中运行另一个查询以再次通过客户ID或客户名称检索该客户的所有订单。

答案 3 :(得分:0)

while($info = mysql_fetch_array( $data )) - 循环中,您打印输出的位置,可以将其添加到standard array,其中键是Session_ids。

然后调用echo $foo['sdgfafjhsf']来获取一个带有db-entries的数组,你可以通过相应的方式枚举它。