Použití fulltextového vyhledávání MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier])
věc.
Řekněme, že vaše tabulka je articles
a musíte najít související příspěvky o názvu aktuálního příspěvku. Udělejte to takto:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Získáte tak 5 nejlepších souvisejících příspěvků.
Nejprve však nezapomeňte povolit Fulltextové vyhledávání pro sloupce této tabulky spuštěním tohoto dotazu:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDITACE]:Proč nepoužít LIKE
: Vysvětlení pro OP:
Protože to nedává správné výsledky. Řekněme, že váš aktuální název je „Hudba roku 1980“ a chcete o tom související příspěvky. Nyní, pokud použijete LIKE
pak se objeví pouze příspěvky obsahující PŘESNĚ sekvenci slov "Hudba roku 1980". Pokud však použijete MATCH ... AGAINST
, pak se objeví příspěvky, které obsahují Music NEBO 1980. Nahoře se také zobrazí příspěvky obsahující hudbu i rok 1980, protože to dává SCORE
ke každému výsledku a třídíme podle tohoto skóre. Doufám, že je to jasné.
[UPRAVIT]:2 :
Pokud máte kategorie, můžete přidat AND Category = '$CurrentCategory'
v dotazu SQL where clause
abyste získali konkrétnější výsledky.
[EDITACE]:3:OP nemůže použít úplný text :
Pokud nemůžete použít Full Text (z nějakého důvodu), můžete zobrazit pouze 5 náhodných příspěvků ze stejné kategorie. Jelikož jsou ve stejné kategorii, jsou alespoň nějak příbuzné:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Upravená syntaxe:Změněno LIMTI na LIMIT v kódu MySQL