Форум "DataBase и SQL" (архив)
Язык запросов баз даных
sql ЗАПРОСЕсть у меня такой запрос SELECT * FROM kvartira where tip_oper='$tip_oper' and rayon='$rayon' and (1=1 or kol_kom='$kol_kom' or material='$material') суть запроса в том что пользователь выбирает параметры по которым необходимо произвести выборку из базы такой параметр как $tip_oper всегда имеет определенное значение, то же самое относится к параметру $rayon, все остальные параметры необязательные, я всегда считал что данный запрос должен работать нормально, но недавно столкнулся с тем что если указываешь третий параметр $kol_kom (количество комнат) я указал = 2 у меня вывело не только двухкомнатыне квартиры но и 1-комнатные и 3-комнатные, подозреваю что это связано с наличием заглушки 1=1 вопрос - нужна ли эта заглушка и как правильнее написать запрос?
Отмодерировал: Deep |
|
#1 Mystic © 15.11.05 11:13:19
1=1 не нужна. Потому что для любого X, справедливо: True or X = True Т. е. заглушка 1=1 Просто отвекает поиск по количеству комнат и материалу. Далее, если убрать 1=1, то все равно количество комнат может и не олказаться равным $kol_kom, если справедливо material='$material'. |
|
>#1 Mystic © 15 а как бы сделать так чтобы делалась выборка 2-х комнатных квартир из выбранного материала? |
|
#3 Mystic © 15.11.05 11:50:35
Соедини все and-ом... OR нужен для того, чтобы в том случае, если количество комнат не было введено --- выводились все варианты. Но я не совсем уверен в том, что правильно: '$kol_kom'='' или '$kol_kom' IS NULL (интерпретируется ли пустая строка '' как NULL в MySQL).
|
|
> (интерпретируется ли пустая строка '' как NULL в MySQL). для поля числового типа пустая строка в MySQL интерпретируется как 0 (число ноль). |
|
мне вот посоветовали такой вариант попробовать $kol_kom_=$kol_kom.'%';процент указывает на то что может быть любое значение,т.е. если $kol_kom ='' то получится что kol_kom like '%' т.е. любому значению.. в обратном случае..kol_kom like '2%' выберутся только с 2 квартирами.. |
|
#6 Mystic © 15.11.05 13:32:19
По хорошему поля тип поля должен быть числовой... Да, это сработает, но если кто предложит десятикомнатные аппартаменты, то она будут рассматриваться и как однокомнатные |
|
Странно но запрос указанный тут > #5 Immitator © не работает |
|
> #3 Mystic © этот тоже не хочет работать |
|
#9 Mystic © 15.11.05 14:24:19
Приведи описание kvartira
|
|
у меня все поля в таблице типа varchar(...) такой вопрос а если я присвою переменной значение - * будет ли это работать как маска - выбрать все? $kol_kom'='*' ;
|
|
>#10 Immitator © нет, не будет если не будешь указывать никаких ограничений тогда "все" и выберется |
Тема находится в архиве
Написать ответ |
|
