0

mysqlには、列を持つユーザーテーブルがあります

ban_start_date [日時]

禁止日 [int]

これは、ユーザーがban_start_dateさらにban_days数日間禁止されることを意味します。ユーザーテーブルを選択するにはどうすればよいですか?ただし、禁止されている残りの日数を示す新しい列を追加しますか?

NOW() がban_start_dateban_start_date+の間にあるかどうかを確認する必要があることはわかっban_daysています。そんな感じ。

ありがとう

4

2 に答える 2

0

代わりに ban_end_date を保存しないのはなぜですか? 必要に応じて ban_days を保存できますが、その値はあまり頻繁に必要としないはずです。

bad_end_date を保存することの良い点 (私が思うに) は、禁止されていない人はそれを NULL として持つことです。この 1 つの値を調べてユーザーに伝えるのは非常に簡単です。

「あなたはban_endまで追放されます。」

一日の始まりに、ban_end_date < now() である NULL 以外の bad_end_date 値を持つ人々をチェックし、それらを NULL に設定します。簡単。

于 2015-01-09T05:41:46.990 に答える
0

してみてください:

SELECT 
    DATEDIFF(DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY), DATE(CURDATE())) AS ban_days_left 
FROM
    users as banned_users
WHERE
    DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY) > DATE(CURDATE());

クエリは、実行時に禁止されているユーザーのみを取得ban_daysし、ban_start_date一時的に生成する禁止終了日( DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)) に追加します。その後、ban-enddateと今日の日付のDATEDIFF間の日数をカウントするために使用され、実際には.ban_days_left

于 2015-01-08T22:52:30.537 に答える