4

我的表结构是

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 的任何内容,包括重复。

4

5 回答 5

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";
}
于 2013-03-04T09:26:09.520 回答
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";
}
于 2013-03-04T09:30:49.853 回答
1
select * from table where order_id=951 ORDER BY date DESC, id ASC

然后从 PHP 操作

Order By 不会返回分组内的行。如果您真的想使用 sql,那么您可以尝试使用 GROUP_CONCAT 将分组的行值作为连接字符串返回,然后将其从 PHP 中拆分出来。

于 2013-03-04T09:34:15.290 回答
1

由于您的表拥有该time列,也许您应该在查询中考虑,顺序默认为升序,因此您可以跳过写作asc

select * from table where order_id=951 order by date,time,id;

您可以创建一个全局 php 变量来存储您读取的当前日期,在 while 循环中每次进行比较,如果它与全局变量不同,则打印一些内容以与最后一组分开。

于 2013-03-04T10:05:33.707 回答
0

另一种解决方案是使用GROUP_CONCAT

select date,group_concat("Location " , location, "\n") from table where order_id=951 GROUP BY date ORDER BY id ASC

于 2013-03-04T09:41:10.530 回答