0

サーバーで発生したことのログを保持するテーブル (ログ) があり、取得した結果を並べ替える関数を作成したいと考えていました。

私の質問はです。

SELECT * 
  FROM Logs 
  WHERE username = '$user' 
  ORDER BY cur_timestamp DESC

(cur_timestamp はログ テーブルのフィールドで、レコード挿入のタイムスタンプです)
($user はユーザー名です (以前に設定))

これは、通常どおり、すべてのレコードの配列を降順で返します。今私がしたいのは、データベースにクエリを実行し、特定の日または月内のレコードのみを返すようにすることです。たとえば、ユーザーが月を選択した場合、すべてのレコードのみを返すようにします。その月。

GROUP BY私は何をすべきかを調査しようとしてきましたが、これが 1 つの結果しか返さないことを除けば、この手法を使用するように指示されているようです。私はちょっと確信が持てません。どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

3

例 (2012 年 1 月のログ):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and cur_timestamp between '2012-01-01' and '2012-01-31'
ORDER BY cur_timestamp DESC

今日だけ:

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) = curdate()
ORDER BY cur_timestamp DESC

過去から現在までの特定の時刻が必要な場合は、DATEADDを使用できます。

例 (過去 30 日間のログ):

SELECT * 
FROM Logs 
WHERE username = '$user' 
and date(cur_timestamp) >= DATE_ADD(curdate(), INTERVAL -30 DAY)
ORDER BY cur_timestamp DESC
于 2012-05-08T09:38:45.610 に答える
0

問題を正しく理解していれば、GROUP BY する必要はないと思いますが、特定の時間範囲内のすべてのログを選択するために WHERE を追加するだけです

SELECT * 
FROM Logs 
WHERE username = '$user'
AND cur_timestamp > '2010-01-01'
AND cur_timestamp < '2012-12-01'
ORDER BY cur_timestamp DESC

必要なのは、日付範囲を調整することだけです。GROUP BY は不要

于 2012-05-08T09:45:16.797 に答える