2015-04-22 4 views
2

я таблица с именем content с полем id, namew, publish_date, unpublish_dateЕсли Condtion в MySQL где положение

publish_date и unpublish_date оба могут быть null

Теперь я хочу, чтобы выбрать данные, если publish_date is not null затем publish_date <= CURDATE()

Задаю вопрос:

select * 
from content 
where if(publish_date is not null, publish_date <= CURDATE(),'') 

Но я не знаю, что положить в другое условие. Coz Мне нужно только, если условие не иначе условие

+4

И если 'publish_date' равно нулю, то что выбрать? –

+0

Если вы хотите включить строки с нулевой датой публикации, тогда 'WHERE IF (publish_date не равно null, publish_date <= CURDATE(), 0)' или просто 'WHERE IFNULL (publish_date, CURDATE()) <= CURDATE()' хотя обертка атрибута в функции означает, что вы не сможете использовать доступные индексы. Если у вас есть указатель на publish_date, то 'WHERE publish_date IS NULL OR publish_date <= CURDATE()' – symcbean

+2

Здесь вам, вероятно, не нужна функция 'if', если вы хотите проверить непустую и текущую или более раннюю дату .. . Необычно видеть функцию 'if' в предложении where, потому что' where' позволяет 'and',' or' – Paul

ответ

2

Вы должны написать взаимно исключающие условия:

select * 
from content 
where publish_date is null 
    or publish_date <= CURDATE() 
+0

@ nur-uddin Попробуйте этот ответ? Я думаю, что этот ответ приемлемый и решить ваши проблемы. – RubahMalam

+0

Это говорит о включении всех строк, где дата публикации является нулевой или дата публикации является сегодня или ранее. Зачем включать даты, когда дата публикации равна нулю? Плакат не объяснил, что они хотят, точно, но если бы это было для выбора статей в блогах/новостях, это, вероятно, опустило бы нули как неопубликованные статьи. – Paul

+0

@Paul: ну, как вы можете видеть из логики post, не должно быть никаких условий, если 'publ_date is null ', поэтому записи должны быть включены, _otherwise_, если я ошибаюсь, OP может просто удалить ненужные' publish_date есть null' состояние. – potashin

0

Привет я не думаю, что где принимают состояние, но вы можете сделали это выберите

SELECT IF(publish_date is not null, publish_date, '') as alias 
FROM content 
WHERE alias != '' 
0
select * from content where publish_date is not null && publish_date <= CURDATE(); 
0

Если вам не нужна часть else, то просто пройдите false.

select * from content where if(publish_date is not null, publish_date <= CURDATE(), true) 
0

Рассмотрим следующий запрос: Если вы не хотите ничего еще состоянии просто поставить 0 (FALSE).

select * 
from content 
WHERE IF(publish_date is not null, publish_date <= CURDATE(), 0) 

Если предположить, что если PUBLISH_DATE равно нулю ничего не проверить.

Details

Смежные вопросы