Запрос с логическими условиями

mustafa

Новичок
Запрос с логическими условиями

есть вот такой запрос:
$sql="SELECT * FROM apartment WHERE count_rooms_from>'$count_rooms_from' AND count_rooms_to<'$count_rooms_to' AND square_from>'$square_from' AND square_to<'$square_to'";
объясните почему он ничего не выводит, если я вырезаю с запроса условия но оставляю только одно AND данные выводятся, получается как я понял запрос не может работать с многими условиями AND, тогда вопрос как организован поиск по БД с многими лог. условиями?
 

Гравицапа

elbirret elcno
mustafa
объясните почему он ничего не выводит,
Потому что, в таблице нет данных подподающих под твои условия выборки.
как организован поиск по БД с многими лог. условиями?
Ты бы почитал сначала какую-нибудь книжку по базам данных и языку SQL.
 

mustafa

Новичок
Дюбуа смотрел, не нашел
объясните что не так?
>Потому что, в таблице нет данных подподающих под твои условия выборки.
как так нет если есть, если не в лом напишите пример как делаете вы
 

Гравицапа

elbirret elcno
mustafa
Берешь консольный клиент к мускулю и учебник по SQL (ну или ман мускуля) и сначала тренируешься составлять запросы там (в консоли)....делаешь выводы.
Потом ...когда уже перейдёшь к PHP части, почитай сначала phpfaq.ru/debug
 

Gorynych

Посетитель PHP-Клуба
mustafa

а почему все условия (и для ..._from и для ..._to ) сравнения для полей ">"? Т.е. читается интуитивно приведенный запрос как: количество_комнат_от > переменная И количество_комнат_до > переменная И площадь_от > переменная И площадь_до > переменная
 

Фанат

oncle terrible
Команда форума
как так нет если есть
удовлетворяющих ЗАПРОСУ в таблице данных НЕТ!
не вообще данных, а составленному тобой ЗАПРОСУ!
понимаешь разницу? или нет?
если не в лом напишите пример как делаете вы
мы составляем условие, под которое попадают нужные нам данные.

Гравицапа
Ну здесь, скорее, не теория баз данных, а элементарная логика.

mustafa
Объясняю один раз.
Условие касается ОДНОЙ записи. Не всех, а ОДНОЙ!
Берёшь одну запись и примеряешь к ней свое условие. Сам. В уме. Если запись удовлетворяет ему - она будет в результате. Если не удовлетворяет - не будет.
 

mustafa

Новичок
>Берешь консольный клиент к мускулю и учебник по SQL (ну или ман мускуля) и сначала тренируешься
брал pma, брал учебник, тренировался...
объясните непонятливому почему этот запрос работает:
SELECT * FROM apartment WHERE count_rooms_from>'$count_rooms_from' AND count_rooms_to<'$count_rooms_to'
а вот этот нет:
SELECT * FROM apartment WHERE count_rooms_from>'$count_rooms_from' AND count_rooms_to<'$count_rooms_to' AND square_from>'$square_from' AND square_to<'$square_to';
разница в количестви AND конструкций?
 

mustafa

Новичок
прошу извинения допустил ошибку в вопросе, сейчас исправлю
...
исправил
 

Фанат

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

Вопросы ещё остались?
 

mustafa

Новичок
2Фанат
если я правильно понял тебя то нужно делать вот так:
1.SELECT * FROM apartment WHERE count_rooms_from>'$count_rooms_from' AND count_rooms_to<'$count_rooms_to' AND square_from>'$square_from' AND square_to<'$square_to'";
перписать так что бы в запросе было не больше 1 AND.
2.Запрос будит примерно такой:
SELECT * FROM apartment WHERE count_rooms_from>'$count_rooms_from' AND count_rooms_to<'$count_rooms_to';
тоже самое для других полей
Так?
 

Фанат

oncle terrible
Команда форума
убери это убожество.
ГДЕ В МОИХ СЛОВАХ БЫЛО ПРО "не больше 1 AND"?????
Ты с кем, вообще, сейчас разговариваешь? Со мной или сам с собой? У тебя как было в самом начала "убрать AND" - так и осталось!

Включи остатки мозгов и попробуй понять, что я говорю!
Условие. Надо. Составлять. Так. Чтобы. КАЖДАЯ!!! нужная. запись. под. него. подходила.

Ты вопрос свой помнишь вообще? Тебе напомнить?
объясните почему он ничего не выводит
Вот тебе и ответили, что НЕТУ записей, подходящих под условие.

Значит, надо менять запрос. Чтобы подходили
 

mustafa

Новичок
решение:
SELECT * FROM apartment WHERE ((count_rooms_from>'$count_rooms_from') AND (count_rooms_to<'$count_rooms_to')) AND ((square_from>'$square_from') AND (square_to<'$square_to'))
 

_Leonchik_

Новичок
mustafa иди почитай про оптимизацию WHERE
вот тут например на русском:
_h**p://hosting.skif.net/docs/mysql/manual.ru_MySQL_Optimisation.html#Where_optimisations
 
Сверху