Я смотрел вокруг SO и задавался вопросом, как я буду заниматься созданием похожих или похожих сообщений для отображения на моем веб-сайте с использованием PHP и MySQL? Что является основным примером того, как это сделать?
Использование текстового поиска 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