Братцы-программеры!!!
Объясните "чайнику", каким образом построить 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 в безе является текстовым (может стоит изменить его формат на числовой, или это не обязательно?).
PHP+MySQL
-
ivank
-
ivank
Re: PHP+MySQL
Казалось бы все так просто, но не работает! Я даже пробовал другую конструкцию:
SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%' AND (age BETWEEN $age1 and $age2), что кстати тоже не работает. И даже не выдает сообщения об ошибке, а просто выводит нулевой результат запроса.
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
Re: PHP+MySQL
Причина моей ошибки банальна - случайно раскоментировалась "лишняя" строка и возник конфликт, правда интерпретатор почему-то не выдавал сообщение об ошибке! Именно это и загнало меня в тупик, я думал, что все дело в синтаксисе!
На счет ID Prisoner абсолютно прав, каюсь, поторопился!
Возникла проблема другого рода:
во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса!
На практике это выглядит так:
Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!!
На счет ID Prisoner абсолютно прав, каюсь, поторопился!
Возникла проблема другого рода:
во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса!
На практике это выглядит так:
Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!!
-
Prisoner
Re: PHP+MySQL
Забавно... имхо дело опять-таки не в глюках софта и программера. Погляди сам - чем больше требований к чему-либо(абстрактно давай помыслим), тем меньше этого чего-либо будет этим требованиям отвечать.
Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой.
Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля
.
Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой.
Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля
.-
Prisoner
Re: PHP+MySQL
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 не должны заключаться в кавычки!!!
Теперь все работает просто замечательно!!!
Дело в другом. Тут можно задать всего 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
Угу... только хотел процитировать самого себя
- "Имхо что-то делаешь не так... приглядись внимательнее."
. Рад, что у тебя все получилось! 
- "Имхо что-то делаешь не так... приглядись внимательнее."
. Рад, что у тебя все получилось! 