Använda MySQL fulltextsökning MATCH (col1,col2,...) AGAINST (expr [search_modifier])
sak.
Låt oss säga att din tabell är articles
och du måste hitta relaterade inlägg om titeln på det aktuella inlägget. Gör så här:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Detta ger dig de fem bästa relaterade inläggen.
Men kom först ihåg att aktivera fulltextsökning för tabellens kolumner genom att köra den här frågan:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Varför inte använda LIKE
: Förtydligande till OP:
Eftersom det inte ger korrekta resultat. Låt oss säga att din nuvarande titel är "Music of 1980" och att du vill ha relaterade inlägg om det. Nu, om du använder LIKE
då kommer bara de inlägg som innehåller EXAKT ordsekvensen "Music of 1980" att dyka upp. Men om du använder MATCH ... AGAINST
, då visas inlägg som innehåller Music OR 1980. Dessutom kommer inläggen som innehåller både musik och 1980 att visas på toppen eftersom det ger en SCORE
till varje resultat och vi sorterar efter den poängen. Jag hoppas att det är tydligt.
[EDIT]:2 :
Om du har kategorier kan du lägga till AND Category = '$CurrentCategory'
i SQL-frågan where clause
för att få mer specifika resultat.
[EDIT]:3:OP kan inte använda fulltext :
Om du inte kan använda Full Text (av någon anledning) kan du bara visa 5 slumpmässiga inlägg från samma kategori. Eftersom de är i samma kategori är de åtminstone på något sätt relaterade:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Redigerad syntax:Ändrade LIMTI till LIMIT i MySQL-kod