Показать полную графическую версию : PHP+MySQL
GhostBuster
20-08-2003, 11:34
Братцы-программеры!!!
Объясните "чайнику", каким образом построить 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 вполне будет работать.
GhostBuster
20-08-2003, 14:42
Казалось бы все так просто, но не работает! Я даже пробовал другую конструкцию:
SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%' AND (age BETWEEN $age1 and $age2), что кстати тоже не работает. И даже не выдает сообщения об ошибке, а просто выводит нулевой результат запроса.
Prisoner
21-08-2003, 01:21
Имхо что-то делаешь не так... приглядись внимательнее. Возраст и правда следует хранить в числовом формате (опять-таки имхо :)). Плюс, не нравится мне этот твой ЛАЙК, ведь АйДи вроде как уникален, почему тогда не знак сравнения равенства использовать?
GhostBuster
21-08-2003, 13:23
Причина моей ошибки банальна - случайно раскоментировалась "лишняя" строка и возник конфликт, правда интерпретатор почему-то не выдавал сообщение об ошибке! Именно это и загнало меня в тупик, я думал, что все дело в синтаксисе!
На счет ID Prisoner абсолютно прав, каюсь, поторопился!
Возникла проблема другого рода:
во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса!
На практике это выглядит так:
Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!!
Prisoner
21-08-2003, 16:22
Забавно... имхо дело опять-таки не в глюках софта и программера. Погляди сам - чем больше требований к чему-либо(абстрактно давай помыслим), тем меньше этого чего-либо будет этим требованиям отвечать.
Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой.
Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля ;).
GhostBuster
21-08-2003, 17:26
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
21-08-2003, 21:07
Угу... только хотел процитировать самого себя :) - "Имхо что-то делаешь не так... приглядись внимательнее." :). Рад, что у тебя все получилось! :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.