Как зделать такой запрос?

Pr1de

Новичок
Как зделать такой запрос?

Здравствуйте! у меня есть форма!
<input type=text name=cost1>
<input type=text name=cost2>
<input type=text name=kolrooms>

Юзер вводит данные и выполняется запрос!

$query="SELECT `city`,`type`,`about`,`cost` FROM `obzor` WHERE `cost`>=$cost1 AND `cost`<=$cost2 AND `kolrooms`='$kolrooms' ";

все отлично работает!Но если пользователя не интересует точное кол-во комнат(kolrooms) не ужели надо спомощью if кидать на другой запрос который не содеhжит условия `kolrooms`='$kolrooms'. Или есть какой то другой выход?


ps:можно как то зделать что бы если переменая $kolrooms пуста,присвоить ей значение содержащие все варианты типа * (select * from)
 

zerkms

TDD infected
Команда форума
hint: можно вообще `kolrooms`='$kolrooms' не включать в запрос
 

nimistar

Новичок
Гы....

это вообще-то просто логика!

PHP:
$_WHERE=array();
if(!empty($cost1))$_WHERE[]="`cost`>=$cost1";
if(!empty($cost2))$_WHERE[]="`cost`<=$cost2";
if(!empty($kolrooms))$_WHERE[]="`kolrooms`>=$kolrooms";

$query="SELECT `city`,`type`,`about`,`cost` FROM `obzor`".(count($_WHERE)>0 ? ' WHERE '.implode(' AND ',$_WHERE) : '');
 

amadeus

Новичок
Одним запросом это можно сделать так:
PHP:
$query="SELECT `city`,`type`,`about`,`cost` FROM `obzor` WHERE `cost`>=$cost1 
AND `cost`<=$cost2 AND (`kolrooms`='$kolrooms' OR '$kolrooms'='')";
но так делать не нужно, потому что ради стабильности работы, всё равно, нужно проверять наличие переданных формой переменных, а ради безопасности ещё и их содержимое.
 

nimistar

Новичок
вопрос на мой взгляд охватывает не только пустые значения, а все значения поля `kolrooms`

а прверка входных данных это другой вопрос :)
 

amadeus

Новичок
вопрос на мой взгляд охватывает не только пустые значения, а все значения поля `kolrooms`
а прверка входных данных это другой вопрос :)
Угу. Так и будут выбраны все значения, проверяется то не равенство поля пустому значению, а равенство переменной пустой строке. Значок там $ такой стоит. Если значение не ввели получится '' = '' истина априори и выбраны будут все значения.
 

nimistar

Новичок
Автор оригинала: amadeus
Угу. Так и будут выбраны все значения, проверяется то не равенство поля пустому значению, а равенство переменной пустой строке. Значок там $ такой стоит. Если значение не ввели получится '' = '' истина априори и выбраны будут все значения.
Упс! незаметил! точно !!!
Красиво!!! :)
 

Фанат

oncle terrible
Команда форума
как раз некрасиво.
красиво - это составлять запрос именно в скрипте.
вот только без этой уродливой экономии одной строчки, как у тебя.
 

amadeus

Новичок
amadeus
но так делать не нужно, потому что ради стабильности работы, всё равно, нужно проверять наличие переданных формой переменных, а ради безопасности ещё и их содержимое.
Фанат зачем писать, лишь бы написать? Ясно всем, что так уродливо экономить строчки нельзя. Это нечто вроде простенькой головоломки: "а можно ли извратиться и зашатать одной строкой?" - "Можно". А то, что не нужно уже было написано выше. Для себя тему закрываю.
 

Фанат

oncle terrible
Команда форума
вот себя и спроси.
зачем писать код, лишь бы написать?
ты для кого вообще его писал?
для автора вопроса? или головоломки решал для собственного удовольствия?
 

amadeus

Новичок
Фанат,
Ты прав, извиняюсь, я мог тем самым ввести кого-то в заблуждение, что так действительно "красиво".
 

nimistar

Новичок
Автор оригинала: amadeus
Фанат,
Ты прав, извиняюсь, я мог тем самым ввести кого-то в заблуждение, что так действительно "красиво".
Прошу прощенье за развитие темы!


Оправдаюсь! мне просто много писаь лень ... и всегда стораюсь написать код - который легко расширяется в ширь ....
(любой код головоломка :) )

А чам маеньше строк таем проще его понять ..... тогда код становится чистой логикой! :)
 
Сверху