Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: поиск по двум полям
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » поиск по двум полям

Страниц (1): [1]
 

1. Barakuda - 23 Июля, 2014 - 00:10:10 - перейти к сообщению
Что дано: в таблице есть два поля "name" и "lastname"
и есть форма поиска на одно поле.
Допустим в таблице что-то такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1. +-----------+----------+
  2. |    name   | lastname |
  3. +-----------+----------+
  4. |Иван       |Сулов     |
  5. |Антон      |Суворов   |
  6. |Олег       |Иванов    |
  7. |Камиль     |Иварин   |
  8. +-----------+----------+

Если в поле ввода написать "Ива"

результатом будет

CODE (htmlphp):
скопировать код в буфер обмена
  1. +-----------+----------+
  2. |    name   | lastname |
  3. +-----------+----------+
  4. |Иван       |Сулов     |
  5. |Олег       |Иванов    |
  6. |Камиль     |Иварин   |
  7. +-----------+----------+

Но если запрос - "Иван Сулов", то понятное дело что запрос вернет ничего, так как поиск происходит по одному полю:
PHP:
скопировать код в буфер обмена
  1. WHERE table.name LIKE '%'.$search.'%\' OR   table.lastname LIKE '%'.$search.'%\'

можно сделать отдельную таблицу со связью по id, где будет единое поле, но хотелось бы без этого. Что можете подсказать?
(Добавление)
Стоит оговориться что CONCAT(table.name, table.lastname) - не срабатывает, правда я так и не понял почему, так как никогда им не пользовался.
Полнотестовый поиск тоже отпадает.
2. Panoptik - 23 Июля, 2014 - 08:34:48 - перейти к сообщению
в простом случае можно так
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE Concat(name, ' ', lastname) LIKE '%search_keyword%'

в сложном разбивайте серч терм по словам и по каждому слову и по каждому полю ищете совпадения

ну и самый сложный и действенный вариант использование sphinx и ему подобных
3. Barakuda - 23 Июля, 2014 - 14:54:04 - перейти к сообщению
ну вот я и думал через цикл развибать поисковую строку на слова и искать по каждому слову. Не думаю что для моего небольшого поиска не стоит применять сфинкса.
Но за ответ спасибо.

 

Powered by ExBB FM 1.0 RC1