Главная Новые темы Список тем Задать вопрос Поиск  

Форум "DataBase и SQL" (архив)


Язык запросов баз даных


 #0 Immitator © 15.11.05 10:48:15 - 16.11.05 15:56:11

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'.
 #2 Immitator © 15.11.05 11:17:20

>#1 Mystic © 15 а как бы сделать так чтобы делалась выборка  2-х комнатных квартир из выбранного материала?
 #3 Mystic © 15.11.05 11:50:35

Соедини все and-ом...


SELECT * FROM kvartira
WHERE 1=1
  AND tip_oper='$tip_oper'
  AND rayon='$rayon'  
  AND ('$kol_kom'='' OR kol_kom='$kol_kom')
  AND ('$material'='' OR material='$material')


OR нужен для того, чтобы в том случае, если количество комнат не было введено --- выводились все варианты. Но я не совсем уверен в том, что правильно: '$kol_kom'='' или '$kol_kom' IS NULL (интерпретируется ли пустая строка '' как NULL в MySQL).
 #4 VictorT © 15.11.05 12:06:16

> (интерпретируется ли пустая строка '' как NULL в MySQL).
для поля числового типа пустая строка в MySQL интерпретируется как 0 (число ноль).
 #5 Immitator © 15.11.05 12:44:17

мне вот посоветовали такой вариант попробовать

$kol_kom_=$kol_kom.'%';
$material_=$material.'%';

qvery="SELECT * FROM kvartira where tip_oper='$tip_oper' and  rayon='$rayon'
 and  kol_kom like '$kol_kom_' and material like '$material_'";


процент указывает на то что может быть любое значение,т.е. если $kol_kom =''
то получится что kol_kom like '%' т.е. любому значению..
в обратном случае..kol_kom like '2%'  выберутся только с 2 квартирами..
 #6 Mystic © 15.11.05 13:32:19

По хорошему поля тип поля должен быть числовой... Да, это сработает, но если кто предложит десятикомнатные аппартаменты, то она будут рассматриваться и как однокомнатные Но проиндексировать это поле будет нальзя, а значит поиск будет осуществляться полным перебором.
 #7 Immitator © 15.11.05 13:54:20

Странно но запрос указанный тут >  #5 Immitator ©  не работает  
 #8 Immitator © 15.11.05 14:00:09

>  #3 Mystic © этот тоже не хочет работать  
 #9 Mystic © 15.11.05 14:24:19

Приведи описание kvartira
 #10 Immitator © 16.11.05 12:56:37

у меня все поля в таблице типа varchar(...)   такой вопрос а если я присвою переменной значение - *   будет ли это работать как маска - выбрать все? $kol_kom'='*' ;
 #11 Deep © 16.11.05 15:56:11

>#10   Immitator ©
нет, не будет

если не будешь указывать никаких ограничений тогда "все" и выберется  




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов