Ответ 1
Использование полнотекстового поиска MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier])
.
Скажем, ваша таблица articles
, и вам нужно найти соответствующие сообщения о заголовке текущего сообщения. Сделайте это так:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Это даст вам 5 главных сообщений.
Но сначала запомните, чтобы включить полнотекстовый поиск для этих столбцов таблицы, выполнив этот запрос:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]: Почему бы не использовать LIKE
: Разъяснение для OP:
Потому что он не даст правильных результатов. Позвольте сказать, что ваше текущее название - "Музыка 1980 года", и вы хотите, чтобы на нем были ссылки. Теперь, если вы используете LIKE
, тогда появятся только сообщения, содержащие ТОЧНО последовательность слов "Музыка 1980 года". Однако, если вы используете MATCH ... AGAINST
, появятся сообщения, содержащие Music OR 1980. Кроме того, сообщения, содержащие как музыку, так и 1980, будут отображаться сверху, потому что они дают SCORE
для каждого результата, и мы сортируем по этой оценке. Я надеюсь, что это ясно.
[EDIT]: 2:
Если у вас есть категории, вы можете добавить AND Category = '$CurrentCategory'
в SQL-запрос where clause
, чтобы получить более конкретные результаты.
[EDIT]: 3: OP не может использовать полный текст:
Если вы не можете использовать полный текст (по какой-то причине), вы можете просто показать 5 случайных записей из той же категории. Поскольку они относятся к одной категории, они как-то связаны по крайней мере:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Отредактированный синтаксис: изменен LIMTI на LIMIT в коде MySQL