2013-04-09 3 views
0

У меня огромный SELECT, где мне нужно сделать некоторые условия.MySQL: добавление условий в SELECT

Например:

SELECT `t`.`title`, `t`.`price_paid`, `t`.`date_creation`, `t`.`date_upload` 
    FROM `table_name` AS `t` 
WHERE `t`.`date_creation` >= "'.$year.'-'.$month.'-01" 
    AND `t`.`date_creation` < "'.$year.'-'.($month+1).'-01" 

Я объявляю в PHP значения $ год и $ в месяц, и я хочу все остальные должны быть сделаны в MYSQL (у меня есть веские причины, я могу подробно, если необходимо)

Мне нужно сделать date_upload пустым (null или 0) и price также пустым, если date_upload не с тем же интервалом, что и t. date_creation

+0

может динамически Crea т. е. инструкцию SQL в PHP и передать переменную в объект запроса? –

+0

Давайте использовать параметры для вашего запроса с помощью?? (это синтаксис SQL, а не PHP). Сторона PHP просто добавляет значение предварительно рассчитанных параметров с помощью bindValue().Чтобы сделать их пустыми, вы не можете использовать WHERE, кроме оператора CASE (только THEN NULL, если условие не выполнено) –

+0

Чтобы избежать [SQL], используйте [надлежащее SQL-экранирование] (http://bobby-tables.com/php) инъекционные ошибки] (http://bobby-tables.com/). – tadman

ответ

0

Решения до сих пор, кажется:

-> MySQL Вложенный " Если»в запросах ВЫБОРА

IF (условие, значение, если оно истинно, значение, если ложно)

Что-то вроде

t ВЫБРАТЬ. title, если (t. date_creation> = " '$ год .'-'. $ Month .'- 01" И t. date_upload <". $ Год .'- '. ($ Месяц + 1). -01 ", t. price_paid, '0') как price_paid, t. date_creation, если (t. date_creation> = " '$ год .'-'. $ Month .'- 01" И t. date_upload <". $ Год .'- '. ($ Месяц + 1). -01 ", t. date_upload, '') как date_upload ОТ table_name AS t ГДЕ t. date_creation> = "'. $ Year .'-'. $ Month .'-01" И t. date_creation < « '$ год .'-'. ($ Месяц + 1) .'- 01"

и другие решения, как представляется, функции управления потоком данных

значение случая, когда [COMPARE_VALUE] THEN результат [WHEN [COMPARE_VALUE] THEN результат ...] [ELSE результат] END

Найдено на http://komlenic.com/254/mysql-nested-if-in-select-queries/ http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

1

Не делайте такую ​​математику по дате. если вы декабрь, вы будете просить MySQL искать 2013-13-01 на высоком конце. Используйте фактическую дату MySQL математике:

SELECT ... 
WHERE t_date_creation BETWEEN (now() - INTERVAL 1 MONTH) AND (now() + INTERVAL 1 MONTH) 

AS для вашего запроса, это было бы быть UPDATE запрос:

UPDATE yourtable 
SET date_upload = NULL, price = NULL 
WHERE date_restriction_logic_here. 
+0

хорошая точка с датой. Я буду использовать SQL там все еще мне нужно покрыть весь последний месяц от 1 до конца. –

+0

Обновление не работает в моем случае. Я делаю запрос, и я печатаю результат в файле отчета CSV, поэтому пока не сохраняю db. Другое предложение? –

+0

кажется IF (условие, значение, если true, значение, если false) является самым близким к waht Мне нужно, я добавлю решение ниже –

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