Използване на пълнотекстово търсене на 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);
[РЕДАКТИРАНЕ]:Защо да не използвате LIKE
: Разяснение към ОП:
Защото няма да даде правилни резултати. Да приемем, че текущото ви заглавие е „Музиката на 1980 г.“ и искате свързани публикации за това. Сега, ако използвате LIKE
тогава ще се появят само публикациите, съдържащи ТОЧНО поредицата от думи "Музиката на 1980". Въпреки това, ако използвате MATCH ... AGAINST
, тогава ще се появят публикации, които съдържат музика ИЛИ 1980. Освен това публикациите, които съдържат както Музика, така и 1980, ще се показват най-отгоре, защото дава SCORE
за всеки резултат и ние сортираме по този резултат. Надявам се, че е ясно.
[РЕДАКТИРАНЕ]:2 :
Ако имате категории, можете да добавите AND Category = '$CurrentCategory'
в SQL заявката where clause
за да получите по-конкретни резултати.
[РЕДАКТИРАНЕ]:3:OP не може да използва пълен текст :
Ако не можете да използвате пълен текст (по някаква причина), можете просто да покажете 5 произволни публикации от една и съща категория. Тъй като са в една и съща категория, те са поне по някакъв начин свързани:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Редактиран синтаксис:Променено LIMTI на LIMIT в MySQL код