1

我最近从另一个开发人员那里接手了一些工作,并试图了解为什么特定的 sql 查询不适用于某些时间戳,更具体地说是同一日期的时间戳,sql 查询是:

select FROM_UNIXTIME(order_time,'%Y.%m.%D') as order_time,
       order_time as timealias
  from orders
  where order.id ='.$user->id.'
  group by FROM_UNIXTIME(order_time,'%Y.%m.%D')
  order by timealias desc

这个想法是订单按日期分组以供用户查看,如果日期在不同的日子。

这工作正常:

03/08/2012, 15:10:30 (Unix Timestamp: 1344006630)
04/08/2012, 12:10:30 (Unix Timestamp: 1344082230)

但是,如果他们在同一天但在不同的时间,那么它会在表格中显示第一个订单而不是第二个。

03/08/2012, 15:10:30 (Unix Timestamp: 1344006630)
03/08/2012, 17:30:25 (Unix Timestamp: 1344015025)

我的理论是,它不会将第二个条目的日期识别为与第一个条目的匹配,但由于该日期已被使用,因此它会中断,或类似的结果。但考虑到数据库不是我的强项,这是一个猜测。

如果有人知道它为什么会这样,我真的很感激一些见解。

4

1 回答 1

1

您的查询在 FROM_UNIXTIME 包含一个 GROUP BY。这将为每个 FROM_UNIXTIME 选择一个“随机”行,这不是您想要的。

如果您想查看每个时间戳,包括重复项:

"select FROM_UNIXTIME(order_time,'%Y.%m.%D') as order_time, order_time as timealias from orders where order.id ='".$user->id."' order by timealias desc"

如果要显示每个 FROM_UNIXTIME 的订单数:

"select FROM_UNIXTIME(order_time,'%Y.%m.%D') as order_time, order_time as timealias, COUNT(*) order_cnt from orders where order.id ='".$user->id."' group by 1 order by timealias desc"
于 2012-08-05T21:07:31.840 回答