![]() |
Братцы-программеры!!!
Объясните "чайнику", каким образом построить 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 в безе является текстовым (может стоит изменить его формат на числовой, или это не обязательно?). |
GhostBuster
Если формат числовой, то банальное age >= 18 AND age <= 28 вполне будет работать. |
Казалось бы все так просто, но не работает! Я даже пробовал другую конструкцию:
SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%' AND (age BETWEEN $age1 and $age2), что кстати тоже не работает. И даже не выдает сообщения об ошибке, а просто выводит нулевой результат запроса. |
Имхо что-то делаешь не так... приглядись внимательнее. Возраст и правда следует хранить в числовом формате (опять-таки имхо :)). Плюс, не нравится мне этот твой ЛАЙК, ведь АйДи вроде как уникален, почему тогда не знак сравнения равенства использовать?
|
Причина моей ошибки банальна - случайно раскоментировалась "лишняя" строка и возник конфликт, правда интерпретатор почему-то не выдавал сообщение об ошибке! Именно это и загнало меня в тупик, я думал, что все дело в синтаксисе!
На счет ID Prisoner абсолютно прав, каюсь, поторопился! Возникла проблема другого рода: во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса! На практике это выглядит так: Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!! |
Забавно... имхо дело опять-таки не в глюках софта и программера. Погляди сам - чем больше требований к чему-либо(абстрактно давай помыслим), тем меньше этого чего-либо будет этим требованиям отвечать.
Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой. Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля ;). |
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 не должны заключаться в кавычки!!! Теперь все работает просто замечательно!!! |
Угу... только хотел процитировать самого себя :) - "Имхо что-то делаешь не так... приглядись внимательнее." :). Рад, что у тебя все получилось! :)
|
Время: 16:08. |
Время: 16:08.
© OSzone.net 2001-