MySQL, самый быстрый способ выделить фразу как отдельные слова? - PullRequest
1 голос
/ 14 марта 2011

Это мой текущий запрос

WHERE Keywords.Word = '$search'

Но это работает только в том случае, если $search - это одно слово, если его два или три слова, то он ничего не найдет, так как поле таблицы слов моих ключевых слов имеет толькоодно слово на запись.

Какой самый быстрый способ сделать это?

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Зависит от вашего языка программирования, разделите поисковый запрос на массив и используйте предложение IN:

WHERE Keywords.Word IN ('$search[0]','$search[1]',...)
0 голосов
/ 14 марта 2011

Я бы создал виртуальную таблицу на основе условия поиска при объединении со столбцом таблиц.

Что-то вроде

SELECT *
FROM   table t 
       LEFT JOIN (SELECT 'term1' AS name 
             UNION 
             SELECT 'term2' AS name 
             UNION 
             SELECT 'term3' AS name)  f
         ON f.name = w.Word 
WHERE  (f.name IS NOT NULL)
GROUP by t.id

В этом случае вы динамически создаете значения виртуальной таблицы в виде статических жестко закодированных значений (term1,2,3), и вам необходимо добавить индексы для следующих столбцов

  1. (Word)
  2. при условии, что у вас есть первичный ключ id
0 голосов
/ 14 марта 2011

IN предложение не даст вам наилучшей производительности. Вы можете посмотреть мой ответ на этот другой вопрос .

...