2015-07-10 2 views
0

У меня есть слова для поиска «samsung s3», в то время как у меня есть имя продукта в базе данных «samsung galaxy s3».Mysql - Как получить подстановочный поиск по словам укуса

и мой запрос:

select * from products where status=1 and name like '%samsung s3%' 

, так что я не подвожу никакого результата, возможно, мы можем слово в поиску имени строки.

+2

Вы можете использовать ''% samsung% s3% '' или полный текст поиска –

+0

да Вы правы, вы можете добавить ответ – naCheex

ответ

1

Вы должны использовать ключевые слова. Вероятно, когда вы сохраняете имя продукта, чтобы его можно было искать со всеми ключевыми словами, добавьте отдельные ключевые слова для всего, что вы хотите найти. Теперь это лучший способ для меня.

Например: так для Samsung Galaxy s3 я бы сохранить 3 записи в моей таблице ключевых слов, то есть: Samsung, Galaxy, s3

Else вы можете разделить вашу строку поиска и поиска с каждым словом в БД.

Например:

select * from products where status=1 and (name like '%samsung%' or name like '%s3%')

Существует полный поиск текста в MS SQL. Он может быть доступен в MySQL или его эквиваленте.

Редактировать: поиск и подтверждение полнотекстового поиска существуют для MySQL. Вот link Но будьте осторожны. Полный текстовый поиск медленный. Специально, если это большая база данных.

0

В MySql есть аккуратные функции поиска на естественном языке, которые работают с текстовыми столбцами и столбцами varchar.

https://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html

Идея вы могли бы сделать:

select * from products where status=1 MATCH (name) AGAINST ('samsung s3'); 
0
  1. Создать полнотекстовый индекс на поле имени

    ALTER TABLE products ADD FULLTEXT (name); 
    
  2. Выполнить запрос: -

    SELECT * FROM products WHERE status=1 AND name MATCH(name) AGAINST ('+samsung +s3' IN BOOLEAN MODE); 
    
Смежные вопросы