MySQL MATCH ПРОТИВ запроса с длинным синтаксисом WHERE и OR? - PullRequest
1 голос
/ 03 августа 2010

Следующий запрос работает не так, как я ожидаю:

SELECT DISTINCT * 
FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE'

Это возвращает больше результатов, чем я ожидал - это не ограничивает мои результаты теми, что на 'вязе'.

Если я удаляю последнюю строку (И Цвет ...), я вижу, что мой МАТЧ ПРОТИВ работает просто отлично и действительно ограничивается только теми, что на 'вязе'.

Нужно ли делать подзапрос или что-то, что можно было бы извлечь из Color? Правильный синтаксис был бы очень полезен, спасибо!

Ответы [ 3 ]

4 голосов
/ 03 августа 2010

Может ли это быть написано так

SELECT DISTINCT * FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm')
AND Color IN ('RED', 'WHITE', 'BLUE') 

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

0 голосов
/ 28 октября 2014

Для использования MATCH AGAINST требуется не менее 4 символов для каждого искомого слова (по умолчанию в любом случае), поэтому слово «Elm» будет игнорироваться.

0 голосов
/ 03 августа 2010

Может, скобки помогут?

SELECT DISTINCT * 
FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND ( Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE' )
...