我有一个表“订单”,它保存了网站上的所有订单。它以下列方式保存数据:
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分组。因此,它会打印出客户名称和图像,然后打印出与之关联的所有项目。
例如。罗杰,咖啡,牛奶,松饼,果酱
有什么想法吗? 谢谢!
答案 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,您应该考虑使用mysqli
或pdo
。
答案 2 :(得分:0)
在这里你必须运行两个单独的查询。在第一个查询中,您必须找到所有不同的客户名称,如果您使用客户ID而不是客户名称,则更好,因为ID不能重复。然后在获得所有已订购商品的客户后,在循环中迭代它们并在内部循环中运行另一个查询以再次通过客户ID或客户名称检索该客户的所有订单。
答案 3 :(得分:0)
在while($info = mysql_fetch_array( $data ))
- 循环中,您打印输出的位置,可以将其添加到standard array,其中键是Session_ids。
然后调用echo $foo['sdgfafjhsf']
来获取一个带有db-entries的数组,你可以通过相应的方式枚举它。