0

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

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

4 回答 4

0

试试这个。。

 SELECT Session_id,image,item,extra,customer_name FROM orders WHERE status='ordered' group by Session_id,image,item,extra,customer_name
于 2013-06-06T07:17:52.213 回答
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 已被弃用,您应该考虑使用mysqliorpdo代替。

于 2013-06-06T07:23:03.007 回答
0

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

于 2013-06-06T07:25:42.940 回答
0

while($info = mysql_fetch_array( $data ))您打印输出的循环中,您可以将其添加到标准数组中,其中键是 Session_ids。

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

于 2013-06-06T07:26:34.313 回答