Имя mysql, как «%#attributes.q#%» - не возвращает результат для точного совпадения?

StackOverflow https://stackoverflow.com/questions/2441347

Вопрос

У меня есть следующий запрос MySQL:

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

Это прекрасно работает для догадок, но если вы предоставите точное совпадение: «Билл Клинтон» fname = Билл lname = Клинтон к запросу выше, вы получите 0 результатов? где Билл Клинт дает результаты.

Как можно обновить этот запрос, чтобы сказать, что найти результат и равный результатам?

Это было полезно?

Решение

Трудно сказать по вашему вопросу, но я предполагаю, что таблица ваших клиентов будет выглядеть как -то вроде:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

Ваш запрос, как вы заявили в своем вопросе, никогда не будет работать, так как он будет выглядеть так:

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

В таблице нет записей, где поля Fname или Lname содержат «Билл Клинтон»

Вам придется помассировать свой # attributes.q # текст, чтобы он генерировал что -то вроде этого:

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

Как сравнения очень похожи на использование подстановки в именах файлов. Они не разделяют для вас блок текста, но скажут вам, существует ли часть текста, дословно, внутри другой куски текста.

Я думаю, что вам нужно Полный текст поиск, который будет учитывать отдельные слова в строке запроса и вернуть результаты. Конечно, полный текст доступен только на типах таблиц Myisam, поэтому, если вы используете Innodb или какой -то другой тип, вам не повезло.

Другие советы

К вашему сведению - полнотекстовые индексы могут использоваться только с таблицами InnoDB или Myisam и могут быть созданы только для CHAR, VARCHAR или текстовых столбцов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top