Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > WHERE + IF


Автор: romantik 2.3.2007, 23:56
задача в чем:
нужно добавить еще одно условие в выборку (WHERE) взависимости от логического выражения.
насколько я знаю, IF возвращает значение, если логическое выражение TRUE
но возвращает ли оно его не в SELECT, а просто как часть самого SQL-запроса?

пожалуйста, помогите.  smile

Добавлено @ 23:56 
БД - MySQL где-то 5й версии

Добавлено @ 00:01 
Код

IF(tbl_sites_limit.max != -1,\"tbl_sites_limit.max != (SELECT COUNT(id) FROM tbl_counter WHERE datetime > '".$mydate."' AND bannerid IN (SELECT id FROM tbl_banners WHERE siteid = mysiteid)) AND \",\"\")


Добавлено @ 00:02 
что-то мне предсказывает... что данные возвращаються в селект, а не в структуру запроса...

Автор: skyboy 3.3.2007, 13:30
объясни толком, что ты хочешь сделать. приведенный тобой запрос - полон? чесно говоря, не представляю, чтоб такое работало...

Автор: romantik 3.3.2007, 18:51
нет...
есть достаточно очевидная выборка из базы данных.
присутствует несколько статичных условий на выборку.

но одно условие должно быть динамическим, тоесть включаться/не включаться в выборку взависимости от логического выражения.
как это реализовать?

Автор: skyboy 4.3.2007, 11:26
romantik, а ты запрос разве не на клиенте формируешь(PHP)? почему бы там такие кренделя не выписывать? 
и ещё: почему-то мне видно только один запрос: может, расскажешь, какими должны быть запросы в обоих случаях? 
пока будешь отвечать, вот моя идея:
Код

SELECT `some`.`field1`, `some`.`field2`
FROM `some`
CROSS JOIN `tbl_sites_limit`
WHERE `some`.`field3` = 22 AND `some`.`field4`> 12 AND NOT(`tbl_sites_limit`.`max` = -1) /*это первый случай, когда наше дополнительное условие "some.field4> 12" входит в список условий*/
UNION ALL
SELECT `some`.`field1`, `some`.`field2`
FROM `some`
CROSS JOIN `tbl_sites_limit`
WHERE `some`.`field3` = 22 AND `tbl_sites_limit`.`max` = -1 /*это второй случай, когда наше дополнительное условие "some.field4> 12" НЕ входит в список условий*/

замечание по коду: ты бы брал имена полей(поле "max" - d первую очередь, это зарезервированное слово) да и таблиц тоже в обратные апострофы "`". А то хлопот не оберешься...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)