Brug af MySQL fuldtekstsøgning MATCH (col1,col2,...) AGAINST (expr [search_modifier])
ting.
Lad os sige, at din tabel er articles
og du skal finde relaterede indlæg om en titel på det aktuelle indlæg. Gør det sådan her:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Dette vil give dig top 5 relaterede indlæg.
Men husk først at aktivere fuld tekstsøgning for tabellens kolonner ved at køre denne forespørgsel:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Hvorfor ikke bruge LIKE
: Præcisering til OP:
For det vil ikke give korrekte resultater. Lad os sige, at din nuværende titel er "Music of 1980", og du vil have relaterede indlæg om det. Nu, hvis du bruger LIKE
så vil kun indlæggene indeholde PRÆCIS rækkefølgen af ord "Music of 1980" dukke op. Men hvis du bruger MATCH ... AGAINST
, så vises indlæg, der indeholder Music OR 1980. Desuden vil de indlæg, der indeholder både musik og 1980, vises øverst, fordi det giver en SCORE
til hvert resultat, og vi sorterer efter den score. Jeg håber, det er klart.
[EDIT]:2 :
Hvis du har kategorier, kan du tilføje AND Category = '$CurrentCategory'
i SQL-forespørgslen where clause
for at få mere specifikke resultater.
[EDIT]:3:OP kan ikke bruge fuld tekst :
Hvis du ikke kan bruge fuld tekst (af en eller anden grund), kan du bare vise 5 tilfældige indlæg fra samme kategori. Da de er i samme kategori, er de på en eller anden måde relaterede i det mindste:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Redigeret syntaks:Ændrede LIMTI til LIMIT i MySQL-kode