2015-01-08 4 views
0

В MySQL У меня есть таблица пользователей со столбцамиКак получить разницу дат в днях в MySql

ban_start_date [DateTime]

BAN_DAYS [INT]

Где это означает, что пользователь запрещен от ban_start_date еще ban_days дней. Как я могу выбрать таблицу пользователя, но добавить новый столбец, говорящий, сколько дней осталось, они запрещены?

Я знаю, что мне нужно проверить, находится ли NOW() между ban_start_date и ban_start_date + ban_days, и если да, получите разницу. Что-то вроде того.

Благодаря

ответ

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()); 

Query принимает только те пользователи, которые запрещены во время выполнения, а затем добавляет ban_days к ban_start_date временно производить BAN-ENDDATE (DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)). После этого DATEDIFF используется для подсчета дней между ban-enndate и сегодняшней датой, которая на самом деле должна приводить к ban_days_left.

0

Почему бы не сохранить ban_end_date вместо этого? Если вы хотите, вы можете сохранить ban_days, но вам не нужно это значение очень часто.

Хорошая вещь (я думаю) о хранении bad_end_date заключается в том, что люди, которые не запрещены, будут иметь это как NULL. Очень просто найти это значение и рассказать пользователю:

«Вы запрещены до ban_end».

В начале дня у вас будет чек для людей с не-NULL значениями bad_end_date, где ban_end_date < now() и установите их в NULL. Легко.