Доброе время суток, форумчане. Пытаюсь сделать на самописном сайте выборку релевантных записей из БД. Проблема состоит в том, что не получается сделать SELECT запрос со сравнением входящей строки (фразы через кому) и списком ключевиков, который хранится в таблице БД для каждой записи (фразы также через кому). Например: Входная строка: стол, стул, диван, зеркало Строка к записи в БД: зеркало, табуретка, мягкий диван, окно Нужно собственн определить совпадения "диван". Примеров для выборки поиска по одному ключевику из полей таблицы я нашел, но как решить данную проблему мне пока что не удалось. Понимаю, что нужно каждую входную фразу сравнивать с значением поля в БД, но как сделать правильный и корректный запрос, не нагружая при этом БД, я не знаю. Буду благодарен за любые советы.
Ты можешь подсмотреть решение в существующих движках. Так например для форумов стандартно поиск делается именно по таблице слов. Например fluxbb: есть таблицы search_words - "словарь". все [ уникальные ] слова из сообщений. search_matches - таблица-связка "многие ко многим" между словарем и таблицей сообщений search_cache - результат поиска. айдишники найденных сообщений сериализуются и сохраняются здесь, а пользователь видит URL с указанием номера поиска (search_id). типа http: //example.com/search.php?search_id=2024646596&p=2 Так используется кеш поиска. Не надо всякий раз искать заново, когда листаешь страницы выдачи. Чтобы это работало, нужно при сохранении сообщения проиндексировать, т.е. разбить текст на слова и заполнить словарь и таблицу-связку. А собственно скрипт поиска работает со словарем. Он не ищет фразы, только отдельные слова, но эти слова можно соединять через OR, AND и NOT. Если ничего не указано, то считается, что надо найти упоминание каждого слова, то есть через AND.