1

私は報告をする必要があります。レポートは、ユーザーがターミナルのどこをクリックしたかを経時的に追跡します。これらのクリックは、DB の 2 つのテーブルに保存されます。日付範囲をループして 1 時間ごとにレポートを作成するための洗練されたソリューションを見つける必要があります。

時間をかけてループするのが最善かつ最もエレガントな方法で立ち往生しています(レポートには、その時間にクリックが記録されていなくても、00:00 から 23:00 までの時間が表示されます)。

だから私の出力は(例として)

00:00   -   34 clicks
01:00   -   22 clicks
02:00   -   91 clicks
03:00   -   4  Clicks
...
...
23:00   -  17  Clicks

PHP $startHour = 00:00; で 2 つの変数を宣言することを考えていました。$endHour = $startHour + 01:00;

$startHour unitl をインクリメントするループを実行すると、終了時間と一致しましたが、このように時間変数をインクリメントできるかどうかはわかりません。

日付は次の形式で保存されます: 2012-11-22 09:17:29

これが私のmysqlクエリです:

SELECT tbl_xboxstats.sessionend_date, 
       tbl_xboxstatsaux.XboxStatsId, 
       tbl_xboxstatsaux.ItemId, 
       tbl_xboxstats.UnitId, 
       tbl_xboxstats.UIId, 
       WEEK( tbl_xboxstats.sessionend_date ) AS WeekNumber, 
       Count(tbl_xboxstatsaux.ItemId) AS Count
FROM tbl_xboxstats
INNER JOIN tbl_xboxstatsaux ON tbl_xboxstats.id = tbl_xboxstatsaux.XboxStatsId
WHERE tbl_xboxstats.sessionend_date
BETWEEN '2012-11-22 "' . $startHour . '"'
AND '2012-11-22"' . $endHour . '"'
GROUP BY tbl_xboxstatsaux.XboxStatsId
LIMIT 0 , 30
4

3 に答える 3

0

2 つのテーブルがどのように関連しているかはわかりません (出力は時間 + クリック数である必要があると述べましたが、クエリは多くのフィールドを選択します) が、時間ごとにグループ化されたクリック数を表示したい場合は、次のようなものを試してください:

SELECT EXTRACT(HOUR FROM sessionend_date) AS hour, COUNT(*) 
  FROM your_table
 WHERE DATE(sessionend_date) = '2012-11-22'
 GROUP BY hour;
于 2013-01-11T13:18:49.347 に答える
0

これにより、すべての結果が時間ごとにグループ化されます。

SELECT tbl_xboxstats.sessionend_date, 
       tbl_xboxstatsaux.XboxStatsId, 
       tbl_xboxstatsaux.ItemId, 
       tbl_xboxstats.UnitId, 
       tbl_xboxstats.UIId, 
       WEEK( tbl_xboxstats.sessionend_date ) AS WeekNumber, 
       HOUR( tbl_xboxstats.sessionend_date ) AS Hours
       Count(tbl_xboxstatsaux.ItemId) AS Count
FROM tbl_xboxstats
INNER JOIN tbl_xboxstatsaux ON tbl_xboxstats.id = tbl_xboxstatsaux.XboxStatsId
WHERE tbl_xboxstats.sessionend_date
BETWEEN '2012-11-22 "' . $startHour . '"
AND '2012-11-22"' . $endHour . '"
GROUP BY Hours
LIMIT 0 , 30
于 2013-01-11T13:18:55.960 に答える
0

最も安全な方法は、開始日をタイムスタンプに変換し、それに 3600 (1 時間) を追加してから、日付形式に再変換することだと思います。

あるいは、strtotime を使用して 1 時間を追加することもできます。

$starttime = "01:00";

$endtime = strtotime($starttime, "+1 hour")
于 2013-01-11T13:38:47.777 に答える