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)

ただし、それらが同じ日に異なる時間にある場合は、表の最初の順序が表示され、2 番目の順序が表示されます。

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

私の理論では、2 番目のエントリの日付が最初のエントリの日付と一致するものとして認識されませんが、その日付は既に使用されているため、壊れているか、そのような効果があります。しかし、DB が私の長所ではないことを考えると、それは推測です。

このように動作する適切な理由を誰かが知っている場合は、洞察をいただければ幸いです。

4

1 に答える 1

1

クエリには、FROM_UNIXTIMEにGROUPBYが含まれています。これにより、FROM_UNIXTIMEごとに1つの「ランダムな」行が選択されますが、これは必要なものではありません。

重複を含むすべてのタイムスタンプを表示する場合:

"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 に答える