Mysql полнотекстовый поиск исключить результаты - PullRequest
1 голос
/ 07 апреля 2011

У меня вопрос, я делаю полнотекстовый поиск на моем сайте и хочу исключить некоторые результаты. Вот код, который я использую

SELECT *, MATCH(p_title, p_desc) AGAINST ('".$string."') AS score 
FROM posts 
WHERE MATCH(p_title, p_desc) AGAINST ('".$string."') 
ORDER BY score DESC LIMIT 12

Теперь, когда я добавляю, например, WHERE ID! = 1 И ГДЕ тестировать! = 1 до конца SELECT это не работает, я гуглил, но не нашел ничего связанного с этим. Это вообще возможно?

Я нашел способ с php

if($id != $list['id'] AND $list['test'] != 1) { 
// CODE
}

Но это не совсем то, чего я хочу. Спасибо за помощь

1 Ответ

2 голосов
/ 07 апреля 2011

Если вы измените

SELECT *, MATCH(p_title, p_desc) AGAINST ('".$string."') AS score     
FROM posts 
WHERE MATCH(p_title, p_desc) AGAINST ('".$string."') 
ORDER BY score DESC LIMIT 12

Кому:

SELECT *, MATCH(p_title, p_desc) AGAINST ('".$string."') AS score     
FROM posts 
WHERE MATCH(p_title, p_desc) AGAINST ('".$string."') 
  AND (id <> 1) AND (test <> 1)
ORDER BY score DESC LIMIT 12

Это должно работать, конечно, вы не можете добавить дополнительное предложение WHERE после первого.
Если вы хотите добавить дополнительные элементы для фильтрации, вам нужно использовать AND.

Также обратите внимание, что выполнение SELECT * замедлит ваш запрос в сторону вниз. Лучше перечислите только те поля, которые вы хотите перечислить, что сделает ваш запрос намного быстрее.
Убедитесь, что у вас есть индекс для p_title и p_desc для поддержания приемлемой скорости.

Если вы хотите, чтобы поиск был более интеллектуальным, а также возвращались элементы, связанные с $string, вы можете изменить код на:

SELECT *, MATCH(p_title, p_desc) AGAINST ('".$string."') AS score     
FROM posts 
WHERE MATCH(p_title, p_desc) AGAINST ('".$string."' WITH QUERY EXPANSION) 
  AND (id <> 1) AND (test <> 1)
ORDER BY score DESC LIMIT 12

Это позволит MySQL выполнить второй проход, когда термины из найденного в первом проходе используются для поиска дополнительных элементов, которые не соответствуют $ string, но которые do соответствуют данным, найденным в Первый проход.

См .: http://dev.mysql.com/doc/refman/5.5/en/fulltext-query-expansion.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...