我的表结构是
id order_id location time date
1 951 x 2/03/2013
2 951 x 13:00 2/03/2013
3 951 y 3/03/2013
我想在php中用日期分组显示这些内容,如
Date 2/03/2013
Orderid 951 location x
Orderid 951 location x
Date 3/03/2013
Orderid 951 location y
mysql查询即时执行
select * from table where order_id=951 GROUP BY date ORDER BY id ASC
但是此查询仅返回相同数据的第一行。如何按日期类别显示所有重复项。如何在php中使用它来显示数据,将日期作为单独的变量。
我正在编辑问题,让您知道日期可以是任何我想要按日期在组中显示的订单ID,包括重复。
答案 0 :(得分:1)
如果要显示表中的所有行,最好是ORDER BY date, id
,然后在PHP中进行分组。
$result = mysql_query("select * from table ORDER BY data ASC,id ASC");
$last_date = "";
while(($row=mysql_fetch_assoc($result)))
{
if($last_date != $row['date'])
{
echo "Date " . $row['date'] . "\n";
}
echo "Orderid ". $row['order_id']." location " . $row['location']. "\n";
}
答案 1 :(得分:1)
使用STR_TO_DATE()
功能按日期排序
$result = mysql_query("select * from table ORDER BY STR_TO_DATE(date, '%d/%m/%Y') ASC, id ASC");
$last_date = "";
while(($row=mysql_fetch_assoc($result)))
{
if($last_date != $row['date'])
{
echo "Date " . $row['date'] . "\n";
}
echo "Orderid ". $row['order_id']." location " . $row['location']. "\n";
}
答案 2 :(得分:1)
select * from table where order_id=951 ORDER BY date DESC, id ASC
然后从PHP操作
Order By不会返回分组内的行。如果您真的想使用sql,那么您可以尝试GROUP_CONCAT,它将分组的行值作为连接字符串返回,然后将其从PHP中拆分。
答案 3 :(得分:1)
由于您的表格拥有time
列,因此您应该在查询中考虑,订单是默认的升序,因此您可以跳过写asc
。
select * from table where order_id=951 order by date,time,id;
您可以创建一个全局php变量来存储您读取的当前日期,每次在while循环中进行比较,如果它与全局日期不同,则打印一些内容以与最后一组分开。
答案 4 :(得分:0)
另一种解决方案是使用GROUP_CONCAT
:
select date,group_concat("Location " , location, "\n") from table where order_id=951 GROUP BY date ORDER BY id ASC