Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание поискового запроса к бд
 
 автор: h0x   (30.01.2013 в 16:57)   письмо автору
 
 

Доброе время суток уважаемые форумчане, подскажите как решить следующую задачу:

Есть поле поиска, в котором пользователь пишет через пробел несколько слов. Через AJAX вся строка летит на сервер и обрабатывается следующим образом:
1) Удаляются пробелы методами php
2) Создается массив вида ('иван', 'петрович');
Есть в базе данных 3 поля: имя фамилия и отчество,по которым ищется.
Kак корректно составить запрос?
Нашелся человек с совпадающими тремя полями ФИО
При том если написать Иван Коз - тоже нашлись все Иваны Козловы
Пока идея такова:
Нужно написать WHERE name like '%$a[0]%' or name like '%$a[1]%' .... по количеству элементов в массиве
и так же одновременно WHERE surname like '%$a[0]%' or surname like '%$a[1]%'
и
WHERE middlename like '%$a[0]%' or surname like '%$a[1]%'

Вот как это реализовать?

  Ответить  
 
 автор: Sfinks   (01.02.2013 в 08:51)   письмо автору
 
   для: h0x   (30.01.2013 в 16:57)
 

Т.е. Вы хотите, чтобы каждое слово искалось по вссем трем полям?

Объеденив Ваши условия будет так:
/*<? любое из слов должно присутствовать в каждом поле */
SELECT FROM tbl
WHERE 
name like '%слово1%' OR name like '%слово2%' )
  AND ( 
surname like '%слово1%' OR surname like '%слово2%' )
  AND ( 
middlename like '%слово1%' OR surname like '%слово2%' )
Но логичнее, по-моему, так:
/*<? каждое введенное слово должно присутствовать в любом поле */
SELECT FROM tbl
WHERE 
name like '%слово1%' OR surname like '%слово1%' OR middlename like '%слово1%' )
  AND ( 
name like '%слово2%' OR surname like '%слово2%' OR middlename like '%слово2%' )
или так:
/*<? любое слово должно присутствовать в любом поле */
SELECT FROM tbl
WHERE name like 
'%слово1%' OR surname like '%слово1%' OR middlename like '%слово1%'
   
OR name like '%слово2%' OR surname like '%слово2%' OR middlename like '%слово2%'

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования