поиск по любому слову с использованием LIKE% - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть таблица базы данных, которая имеет поле firstname и поле lastname.Я пытаюсь реализовать систему поиска по любому слову, используя поле поиска, где, если, скажем, у нас есть пользователь с именем John Stanley Smith в базе данных (где firstname = John Stanley и lastname = Smith), я хочу иметь возможность вернутьсяJohn Stanley Smith, если пользователь вводит любое из следующего:

1- Любая буква, являющаяся частью John Stanley Smith (j, s, l, e, y, m и т. Д.)2- Любое слово, которое является частью John Stanley Smith3- Любая комбинация слов (в любом порядке), которая является частью John Stanley Smith, что означает, что, если пользователь вводит либо John Stanley, либо John Smith, либо Stanley Smith, либо Stanley John (вы поняли идею) и т. Д... Я хочу найти John Stanley Smith.

Я знаю, что могу сделать это с помощью функции Полнотекстовый поиск MySQL , но если я это сделаю, точка номер один не будет работать (потому что функция полнотекстового поиска MySQL сопоставляет только целые слова, а не подстроки в строке).Кроме того, для выполнения поиска требуется минимальное количество слов (задается константой min_word_len).Итак, я действительно хочу сделать это, используя LIKE%.

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Надеюсь, это поможет

$whereclauses=array();

$terms = explode(' ', $search_term);
foreach ($terms as $term) {
    $term = mysql_real_escape_string($term);
    $whereclauses[] = "CONCAT(first_name, ' ', last_name) LIKE '%$term%'";
}
$sql = "select * from table where";
$sql .= implode(' and ', $whereclauses);
0 голосов
/ 23 февраля 2012

Возможно, меня неправильно поняли, но вы подумали просто сделать это:

SELECT * FROM customer WHERE
    CONCAT(firstname, " ", lastname) LIKE '%$pattern%'

если пользователь вводит более одного слова, разделенных пробелами, просто разбейте строку на слова и измените запрос на

SELECT * FROM customer WHERE
    CONCAT(firstname, " ", lastname) LIKE '%$word1%'
 OR CONCAT(firstname, " ", lastname) LIKE '%$word2%'
 OR CONCAT(firstname, " ", lastname) LIKE '%$word3%'
 ...
...