2010-12-27 6 views
18

以下のクエリでは、datesentが24時間未満のローの数をどのように数えますか? (フィールドdatesentはタイムスタンプです)。事前にタイムスタンプが24時間未満のローのカウント

おかげで、

ジョン

$message = "SELECT datesent, recipient 
       FROM privatemessage 
       WHERE recipient = '$u'"; 


    $messager = mysql_query($message); 

$messagearray = array(); 
+0

私は 'css'タグを削除しました。質問とは関係がないためです。 –

答えて

5

あなたはDATE_SUB機能を使用することができます。 where句の現在の日付から1日を引いてください。

何かEDIT

DATE_SUB(NOW(), INTERVAL 1 DAY) 

のような:変更CURTIME()にNOW()

+0

'CURTIME'は日付と時刻ではなく時間だけを返します。 –

+0

CURTIMEは現在の時刻を返します。現在の日付とは何も関係ありません。代わりにNOW()を渡したいと思うでしょう。 – TehShrike

3
$message="select count(1) 
from privatemessage 
where datesent>=date_sub(now(), 24 hours) 
and recipient='$u'" 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

これは、既存の値が24時間を引いた後に同じ値以上であることを比較しているため、すべての行のカウントを返します。テーブル内の列に対して関数を実行することは、 1つは存在し、操作に使用できませんでした。 –

+0

そうです。申し訳ありませんが、私はMySQLを使用していないので、ソリューションを投稿する前にそのソリューションをテストする機会はありませんでした。 –

+1

単位はHOUR(単数)であり、HOURSではありません。既に提供されているリンクを参照してください:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add –

48

用途:私はこれが古い参照

SELECT COUNT(*) AS cnt 
    FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
+0

これは正しい値を渡す唯一の答えですDATE_SUBの最初のパラメータに – TehShrike

+0

ありがとう...これは有望そうです。しかし、私は実際にそれが動作するかどうかを確認するために結果をエコーするのに問題があります。どのように私は合計をエコーすることができますか? – John

+0

@ John:列エイリアスを定義するために更新しました。 "cnt"は、列の値を取得するためにPHPで参照するものです。 –

0

しかし、後でオンライン検索でここに来る人は誰でも、質問は日時ではなくタイムスタンプに関するものであることを明確にしたいと思います。私はタイムスタンプに基づいてカウントが必要でした。簡単な修正はdatetimeをunix_timestampに変換することです。 MySQL 5.7でテスト済み

SELECT COUNT(*) AS cnt 
FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))