Я создал поисковый индекс (таблица из двух столбцов), который присваивает отдельные ключевые слова их идентификатору контента.
Теперь поиск по отдельным ключевым словам работает и чертовски быстр.
Тем не менее, поиск нескольких ключевых слов, таких как
SELECT media_id, keyword FROM search_index WHERE keyword = 'b' OR keyword = 'a'
вернет результаты в алфавитном порядке ключевых слов (все попадания сначала 'a'
, затем 'b'
).
Я попытался сделать это с помощью PHP на странице результатов, но для этого требуется загрузить из базы данных намного больше данных, чем я хочу отобразить, чтобы получить приемлемую сортировку. С помощью этой техники сценарий может даже превышать время ожидания для ключевых слов, которые назначаются чаще.
Я также пытался GROUP BY
, который, казалось, группировал результат из алфавитного порядка по их отдельным идентификаторам.
Edit:
Наконец я нашел что-то вроде SELECT DISTINCT media_id, keyword, COUNT(media_id) AS num FROM search_index GROUP BY media_id ORDER BY num DESC
, которое работает довольно хорошо, но очень медленно.
Так что, если я ищу «b» и «a», я хочу, чтобы идентификаторы с «a» и «b» были первыми в результате.
Так, как я могу сказать MySQL сортировать выходные данные по частоте обращений к одному идентификатору, все еще будучи чертовски быстрым?