Если вы измените
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