PHP+MySQL
|
GhostBuster
Сообщения: n/a |
Братцы-программеры!!!
Объясните "чайнику", каким образом построить 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 в безе является текстовым (может стоит изменить его формат на числовой, или это не обязательно?). |
|
Отправлено: 11:34, 20-08-2003 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать GhostBuster
Если формат числовой, то банальное age >= 18 AND age <= 28 вполне будет работать. |
------- Отправлено: 11:45, 20-08-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
GhostBuster
Сообщения: n/a |
Казалось бы все так просто, но не работает! Я даже пробовал другую конструкцию:
SELECT * FROM table WHERE id LIKE '$id' AND name LIKE '%$name%' AND ... AND job LIKE '%$job%' AND (age BETWEEN $age1 and $age2), что кстати тоже не работает. И даже не выдает сообщения об ошибке, а просто выводит нулевой результат запроса. |
Отправлено: 14:42, 20-08-2003 | #3 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Имхо что-то делаешь не так... приглядись внимательнее. Возраст и правда следует хранить в числовом формате (опять-таки имхо ). Плюс, не нравится мне этот твой ЛАЙК, ведь АйДи вроде как уникален, почему тогда не знак сравнения равенства использовать?
|
------- Отправлено: 01:21, 21-08-2003 | #4 |
GhostBuster
Сообщения: n/a |
Причина моей ошибки банальна - случайно раскоментировалась "лишняя" строка и возник конфликт, правда интерпретатор почему-то не выдавал сообщение об ошибке! Именно это и загнало меня в тупик, я думал, что все дело в синтаксисе!
На счет ID Prisoner абсолютно прав, каюсь, поторопился! Возникла проблема другого рода: во-первых должен сказать, что оба варианта запроса работают просто отлично, но блокируют собой всю остальную часть запроса! На практике это выглядит так: Комплексный запрос подается с формы с множеством параметров выборки, в том числе и выборка по возрасту в заданных пределах, но если в запрос "вклеить" одну из приведенных конструкций запроса выборки по интервалу, то все остальные параметры запроса просто перестают работать!!! |
|
Отправлено: 13:23, 21-08-2003 | #5 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Забавно... имхо дело опять-таки не в глюках софта и программера. Погляди сам - чем больше требований к чему-либо(абстрактно давай помыслим), тем меньше этого чего-либо будет этим требованиям отвечать.
Пример: хочу из приведенной в твоем первом посте найти человека с возрастом (34,45), именем Микаэль, работай - ассенизатор. Вон сколько параметров, а результат нулевой. Чем больше выбор, тем больше вероятность, что даже сложные запросы с большим числом параметров (хоть по всем полям), отловят какие-то строки и их число будет даже больше нуля . |
------- Отправлено: 16:22, 21-08-2003 | #6 |
GhostBuster
Сообщения: n/a |
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 не должны заключаться в кавычки!!! Теперь все работает просто замечательно!!! |
Отправлено: 17:26, 21-08-2003 | #7 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Угу... только хотел процитировать самого себя - "Имхо что-то делаешь не так... приглядись внимательнее." . Рад, что у тебя все получилось!
|
------- Отправлено: 21:07, 21-08-2003 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
php + mysql | Аlchemist | Программирование в *nix | 10 | 04-09-2008 17:49 | |
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php | v0f41k | Вебмастеру | 4 | 11-05-2008 22:08 | |
PHP+MYSQL | pauluss | Вебмастеру | 6 | 09-07-2004 22:46 | |
PHP and MySql | Andrey V2003 | Вебмастеру | 2 | 10-10-2003 14:55 | |
php и mysql | ZDemon | Программное обеспечение Linux и FreeBSD | 7 | 08-02-2003 03:33 |
|