Релевентный поиск с помощья mysgl-запроса. Строковые функции mysql, посчитать совпадения искомого в поле таблицы (текстовый поиск в таблице)
Расшифровываю заголовок сего сообщения:
У меня уже есть и отлично работает поиск (и в постах и в комментах). Релевантный поиск в постах тоже реализован и работает, но реализовано оно через одно место. При выводе результатов обычного поиска в постах, по умолчанию посты выводятся от новый к старым. Возможность сортировки пользователем имеется. В самом запросе они сортируются по pid - PostId.
Поиск в ПОЛЕ таблицы постов осуществляется по такому шаблончику SS, %SS, SS%/, %SS%.
SS - это строка для поиска.
Вот запрос (на самом деле он более сложный. в таблице есть параметры доступа к посту и всякие джоины, но это к теме не относится. Зачем перегружать излишками):
$q = "select pid,title_posts,txt_posts,postpic_posts from posts where
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?)
order by pid $asc_desc limit ? offset ?";
Вместо lower(txt_posts) like lower(?) и подставляются (привязываются) SS, %SS, SS%/, %SS%.
Сортировка по pid - выше уже упоминал об этом. Что хочу?: Хочу чтобы в результате запроса к
pid, title_posts, txt_posts, postpic_posts добавилось поле с количеством совпадений искомого. Нужно, например, получить такие результаты
count_relev_ss, pid, title_posts, txt_posts, postpic_posts.
Ранее (когда он был бело-зеленый) на https://dev.mysql.com/doc/ было понятнее что где искать. А сейчас не вполне понятно. Да и простого ответа на мой вопрос там нет.
count_relev_ss нужен для сортировки по релевантности. Только как его посчитать?
Например:
$q = "select pid,title_posts,txt_posts,postpic_posts from posts where
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?) or
lower(txt_posts) like lower(?)
order by count_relev_ss $asc_desc limit ? offset ?";