sql >> Databáze >  >> RDS >> Mysql

Vytváření souvisejících nebo podobných příspěvků pomocí PHP a MySQL

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



  1. SQL Server – Co se stane, když je aktualizován řádek v tabulce?

  2. Co je sekvence v oracle

  3. MySQL – NEJMENŠÍ a NEJVĚTŠÍ srovnávací operátory

  4. Jak vytvořit id (automaticky inkrementované) v Mysql s řetězcem zřetězeným s ním? pouze pomocí php