2010-08-03 3 views
1

Следующий запрос не работает так, как я ожидал:MySQL MATCH AGAINST запрос с длинным синтаксисом WHERE AND OR?

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

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

Если я удаляю последнюю строку (AND Color ...), я вижу, что мой MATCH AGAINST работает отлично и на самом деле ограничивает только тех, кто на «вязах».

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

ответ

4

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

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

Надеется, что это помогает.

+0

Это работает, спасибо @Ash! – k00k

0

Возможно, скобки помогут?

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

Добавление круглых скобок заставило его работать так же, как если бы я остановился на последней строке. Смысл, он возвратил все цвета, а не только красный, белый, синий. – k00k

0

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

Смежные вопросы