PHP+MySQL

Ответить
 • Просмотры: 1
Аватара пользователя
ivank

PHP+MySQL

Сообщение ivank »

Братцы-программеры!!!



Объясните "чайнику", каким образом построить MySQL-запрос на выборку в некоторых пределах, например:



Имеется некая таблица table с записями

-----------------------------------------------------

ID Name Age Job

-----------------------------------------------------

01 Саша *22 *художник

02 Петя * 25 *дизайнер

03 Лена * 20 *модельер

04 Вася * *30 *музыкант

-----------------------------------------------------

И имеется форма с параметрами поиска по ID, имени, возрасту и профессии.



Необходимо послать из формы запрос на выборку например по возрасту в интервалах, заданных на форме ($age1 и $age2), пусть они будут, например, сответственно 18-28



Синтаксис запроса будет выглядеть след. образом:

SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%'



Вопрос в том, как дописать строку запроса (что вписать вместо ...). Да и еще одно условие - поле age в безе является текстовым (может стоит изменить его формат на числовой, или это не обязательно?).
Аватара пользователя
ivank

Re: PHP+MySQL

Сообщение ivank »

GhostBuster

Если формат числовой, то банальное age >= 18 AND age
Аватара пользователя
ivank

Re: PHP+MySQL

Сообщение ivank »

Казалось бы все так просто, но не работает! Я даже пробовал другую конструкцию:



SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%' AND (age BETWEEN $age1 and $age2), что кстати тоже не работает. И даже не выдает сообщения об ошибке, а просто выводит нулевой результат запроса.
Аватара пользователя
Prisoner

Re: PHP+MySQL

Сообщение Prisoner »

Имхо что-то делаешь не так... приглядись внимательнее. Возраст и правда следует хранить в числовом формате (опять-таки имхо Изображение). Плюс, не нравится мне этот твой ЛАЙК, ведь АйДи вроде как уникален, почему тогда не знак сравнения равенства использовать?
Аватара пользователя
Prisoner

Re: PHP+MySQL

Сообщение Prisoner »

Причина моей ошибки банальна - случайно раскоментировалась "лишняя" строка и возник конфликт, правда интерпретатор почему-то не выдавал сообщение об ошибке! Именно это и загнало меня в тупик, я думал, что все дело в синтаксисе!

На счет ID Prisoner абсолютно прав, каюсь, поторопился!



Возникла проблема другого рода:

во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса!



На практике это выглядит так:

Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!!
Аватара пользователя
Prisoner

Re: PHP+MySQL

Сообщение Prisoner »

Забавно...  имхо дело опять-таки не в глюках софта и программера. Погляди сам - чем больше требований к чему-либо(абстрактно давай помыслим), тем меньше этого чего-либо будет этим требованиям отвечать.



Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой.



Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля Изображение.
Аватара пользователя
Prisoner

Re: PHP+MySQL

Сообщение Prisoner »

Prisoner, ты говоришь о пользовательской выборке, когда ты _надеешься_ найти то, что сответствует твоему запросу. А я говорю об административной выборке записи, которую я сам же и создал, мне ли не знать, что она существует? И тут хоть сколько параметров вводи, если запрос соответствует действительности, запись будет найдена.



Дело в другом. Тут можно задать всего 2 параметра запроса, например, по имени и по возрастным ограничениям - результат: все равно не будет работать!! Вот о чем я. Дело тут не в большой выборке, а некоей несовместимости выражений в конструкции запроса.





Добавлено:



Не стану вам больше парить мозги.

Я нашел ответ. Все дело в синтаксисе кавычек в запросе!



Правильный код запроса:



SELECT * FROM table WHERE lastname LIKE '%$lastname%' and name LIKE '%$name%' and town LIKE '%$town%' and (age BETWEEN $age1 AND $age2) ORDER BY ID



Дело в том, что age, $age1 и $age2 не должны заключаться в кавычки!!!



Теперь все работает просто замечательно!!!
Аватара пользователя
Prisoner

Re: PHP+MySQL

Сообщение Prisoner »

Угу... только хотел процитировать самого себя Изображение - "Имхо что-то делаешь не так... приглядись внимательнее." Изображение. Рад, что у тебя все получилось! Изображение
Ответить

Вернуться в «Программирование и базы данных»