2014-02-21 4 views
2

Я не могу найти ответ на этот вопрос в Интернете, возможно, потому, что я не знаю правильных терминов/жаргона для поиска.MySQL Поиск по полнотекстовому поиску Неточное совпадение

Я использую свою собственную функцию поиска, чтобы получить строки из таблицы. У меня есть три строки со столбцами с этим входом (без кавычек):

"食" 
"食べる" 
"食糧" 

Теперь, когда я ищу «» Я хочу, чтобы запрос, чтобы вернуть все эти три результата. Но я получаю только первый «», точное совпадение возвращается в моем запросе. Как я могу схватить их всех?

Мой запрос:

$sw = '食'; 
    $query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("'.$sw.'") ORDER BY score DESC;'; 

Я ценю помощь.

Редактировать: добавление% не работает, например «%». $ Sw. '% ". Ни один из ответов пока не работает. :/

+0

может быть 'LIKE' подходит вам лучше в данном случае – Joshua

ответ

1

Использование LIKE:

$sw = '食'; 
$query = ' 
     SELECT *, MATCH(word) AGAINST("'.$sw.'") as score 
     FROM wordlist 
     WHERE work LIKE "'.$sw.'%" 
     ORDER BY score DESC'; 
+0

Это возвращает 0 результатов. – Harpo

0

Вы можете использовать это,

'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) LIKE '%'.$sw.'%' ORDER BY score DESC;' 

вместо своего запроса

+0

Ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «LIKE»% 食% »ORDER BY score DESC – Harpo

0

Попробуйте это:

$sw = '食'; 
$query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE word LIKE "%'.$sw.'%" ORDER BY score DESC;'; 

Кроме того, вы shuld chec k out escaping, sql injection и подготовленные операторы.

+0

Это возвращает 0 результатов. – Harpo

0

Может быть, вы должны использовать LIKE сравнения, но если вы хотите остаться с помощью MATCH() AGAINST() пытаются с этим:

$sw = '食'; 
    $query = 'SELECT *, MATCH(word) AGAINST("+'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("+'.$sw.'") ORDER BY score DESC;'; 
+0

Я уже использую + перед ключевым словом. Но это не сработает. Я все еще получаю только первую строку. – Harpo

+0

У вас есть полнотекстовый индекс в столбце? Вы можете добавить: ALTER TABLE wordlist ADD FULLTEXT (слово); Добавляя индекс и используя сравнение LIKE, запрос должен возвращать 3 строки (его работа для меня) – iubema

+0

У меня это есть. Ладно, очень странно, что это не работает для меня тогда ...:/Спасибо, если у вас есть еще идеи, стреляйте :) – Harpo

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