![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| BlackHawk |
|
|||
|
Unregistered |
Уважаемые Cepera и MuToGeN !!!
Подскажите, пожалуйста, как правильно построить синтаксис множественного запроса на выборку по части поля, значения переменных, при этом должны транслироваться с формы из элемента <select>? Синтаксис одиночного запроса выглядит так: $query="SELECT * FROM `table` WHERE name LIKE '%$name%' ORDER BY `ID` "; С уважением, BlackHawk |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
чего-чего?
-------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| BlackHawk |
|
|||
|
Unregistered |
сейчас расскажу, в чем вся фишка.
Может я совсем не понятно выразился? Идея такова: имеется форма в html-документе, на ней размещены элементы типов <text> и <select>, из которых необходимо послать запрос на выборку. Выборка должна производиться по части поля. Наличие значений, введенных в элементы формы должны определять критерии отбора записей из базы данных. Я сделал такой запрос, который берет значение элемента формы $name (type=text), посылает запрос к базе и возвращает значение поля name, причем выборка производится по части поля. Все отлично работает, но беда в том, что мне необходимо составить комплексный запрос (т.е. так, чтобы запрос подавался сразу с нескольких элементов, соответственно выборка должна производиться также из нескольких полей базы). Вот как раз над этим я и бьюсь, синтаксис MySQL у меня хромает... $query="SELECT * FROM `table` WHERE name LIKE '%$name%' ORDER BY `ID` "; Люди добрые, поможите чем можите, сами мы не местные.... |
|||
|
||||
| BlackHawk |
|
|||
|
Unregistered |
Опять, наверное, не так выразился:
следует понимать как: $name - переменное значение текстового поля на форме в html-документе |
|||
|
||||
| Master |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1530 Регистрация: 13.5.2003 Где: Mother Russia Репутация: 8 Всего: 10 |
LIKE '%$name1%' AND LIKE '%$name2%' OR LIKE '%$name3%'
-------------------- Вавилон, Вавилон Что ты построил, что разрушил? Вавилон, Вавилон Плавятся души дьявольским огнем. |
|||
|
||||
| BlackHawk |
|
|||
|
Unregistered |
Данная строка
предполагает выборку разных значений из одного поля базы, а мне нужно соответственно: field_01 LIKE '%$name1%' field_02 LIKE '%$name2%' |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
Так не пробовал?
|
|||
|
||||
| BlackHawk |
|
|||
|
Unregistered |
Знаешь, Kefir, большое спасибо за совет, твой пример запроса работает, но в нем есть один косяк:
для удобства объяснения немного изменю твой пример: $query="SELECT * FROM `table` WHERE lastname LIKE '%$last_name%' and name LIKE '%$name%' ORDER BY `ID` "; так вот, какой же косяк в нем кроется? Сейчас объясню. Данная срока запроса позволяет пользоваться только одним критерием, например, если ввести фамилию, то он найдет все записи, в которых имеются совпадения. Допустим, мы имеем записи в таблице: Соколов Алексей Малышев Алексей Макаров Виталий Макаров Петр Соломин Юрий если мы введем только один параметр поиска, например имя "лекс", то будут найдены две записи: Соколов Алексей Малышев Алексей также если мы введем один параметр, например фамилию "Мак", то будет найдено две записи: Макаров Виталий Макаров Петр !!! но если мы введем оба параметра сразу, например имя "лекс" и фамилию "Мак", то он не найдет ни одной записи. !!! А мне ведь нужны все Алексеи и все Макаровы, т.е. четыре записи из списка. Запись найдется лишь та, в которой оба эти параметра совпадают!!! Например, имя "лекс" и фамилия "Сокол" - будет найдена запись: Соколов Алексей. Понимаешь о чем я? |
|||
|
||||
| Cepera |
|
||||
![]() PHPexp ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2146 Регистрация: 25.3.2002 Где: Russia, Samara Репутация: 1 Всего: 7 |
надо просто распарсить ответ полученный сервером, получить массив всех введеных слов и для каждого сделать запрос:
кстати, лучше даже использовать так:
таким образом не придется думать о больших маленьких буквах + проверится данный запрос и в фамилии, и в имени в предыдущем запросе должны были выполняться оба условия ... конечно же можно генерить запрос на каждый элемент полученного массива, но представьте себе , если пользователь введет 20 слов для поиска? -------------------- I know it is heavy for reading, but I know you will read it anyway... |
||||
|
|||||
| Cepera |
|
|||
![]() PHPexp ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2146 Регистрация: 25.3.2002 Где: Russia, Samara Репутация: 1 Всего: 7 |
ну, а формат парсинга + проверка для элементов массива будет выглядеть так:
мда, и что на меня нашло?8) -------------------- I know it is heavy for reading, but I know you will read it anyway... |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Огромное тебе спасибо, Cepera!!!
Твой первый пример работает отлично! Во втором примере мне не понятны некоторые моменты: как следует понимать вот это: $search - полученная строка и $search = explode(" ", $search); ? Извини, но чувствую себя полным чайником.... Объясни мне значение содержимого в скобках. P.S. Хочувыразить особую благодарность всем участникам форума. Огромное спасибо за поддержку. Форум Vingrad - мой самый любимый форум. |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
$search - полученная строка и
$search = explode(" ", $search); ? Значит, что search - \то та строка, которую юзер в поиске написал. С помощью explode кидаешь её в массив. |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 7 Всего: 32 |
Если чуток преобразовать Серегин вариант...
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| Cepera |
|
|||
![]() PHPexp ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2146 Регистрация: 25.3.2002 Где: Russia, Samara Репутация: 1 Всего: 7 |
то-то и оно, MuToGeN, что я сразу от такого варианта отказался, как раз и упомянул - представь искать 50 или более элементов
-------------------- I know it is heavy for reading, but I know you will read it anyway... |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 7 Всего: 32 |
Cepera, идея понятна. В принципе, это еще от размера базы зависит.
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |