2016-03-12 2 views
0

У меня есть листинг lp php/mysql, и я отключаюсь, когда хочу только удалить запись, если она началась (поле_1), и нет будущего enddate set (field_5), так что поле field_5 должно быть пустым, прежде чем оно будет удалено. Оба поля начала и окончания даты равны нулю в mysql dbase. Я могу получить код для удаления прошедшего события, используя мой код ниже, но я понятия не имею, как применять логический/условный код mysql, необходимый для проверки того, установлен или нет enddate (field_5), тем самым предотвращая удаление, если это поле установить с строковой датой. Может ли кто-нибудь посоветовать, пожалуйста?mysql delete from row only, если другое поле пусто или пусто

$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')"; 
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')"; 
mysql_query("DELETE FROM events3 WHERE $eventstart < $date ") or die(mysql_error()); 

ответ

2

Попробуйте добавить проверку, если field_5 IS NULL или равно пустая строка с этим кодом:

$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')"; 
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')"; 
mysql_query("DELETE FROM events3 
    WHERE $eventstart < $date AND 
    (field_5 IS NULL OR field_5 ='')" 
) or die(mysql_error()); 

Если нам нужно удалить строки с истекшего набором даты начала и окончания (так как field_1 & field_5 были в прошлом текущей даты и оправданное удаление), мы можем использовать этот код:

$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')"; 
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')"; 
mysql_query("DELETE FROM events3 
    WHERE $eventstart < $date AND 
    (field_5 IS NULL OR field_5 ='' OR $eventend < $date)" 
) or die(mysql_error()); 
+0

Александр ваш код работал с удовольствием, а фигурные скобки определяют условный запрос так же, как функция IF? –

+0

Да, фигурные скобки работают одинаково. Это просто способ надлежащим образом совместить ваше логическое состояние –

+0

Благодарный tx вам обоих джентльменам, независимо от того, что я искал в Google или пытался elswhere на Stack, он, похоже, терпел неудачу, и теперь я вижу, почему и что мои практики должны меняться. –

3

Я думаю, что логика была бы закодирована как:

DELETE e FROM events3 e 
    WHERE field_1 <= NOW() AND field_5 is null; 

Я не вижу необходимости в переменных в этом запросе.

Если вы по ошибке хранятся значения даты как строки, то вам нужно будет str_to_date():

DELETE e FROM events3 e 
    WHERE STR_TO_DATE(field_1, '%m/%d/%Y') <= NOW() AND field_5 is null; 

Сохранение даты в виде строк плохая практика.

+0

Я начинаю понимать, что сохранение строковых дат - это, как вы говорите, плохая практика, и, по вашему мнению, Гордон, я обнаружил, что код Alexanders работал для меня. –