De MySQL Full Text-zoekopdracht gebruiken MATCH (col1,col2,...) AGAINST (expr [search_modifier])
ding.
Stel dat uw tabel articles
is en je moet gerelateerde berichten vinden over een titel van het huidige bericht. Doe het als volgt:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Dit geeft je de top 5 gerelateerde berichten.
Maar onthoud eerst dat u zoeken in volledige tekst voor de kolommen van die tabel moet inschakelen door deze zoekopdracht uit te voeren:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Waarom LIKE
niet gebruiken : Verduidelijking aan OP:
Omdat het niet de juiste resultaten geeft. Laten we zeggen dat je huidige titel "Muziek van 1980" is en je wilt gerelateerde berichten daarover. Als je nu LIKE
. gebruikt dan verschijnen alleen de berichten die PRECIES de reeks woorden "Muziek van 1980" bevatten. Als u echter MATCH ... AGAINST
. gebruikt , dan verschijnen er berichten die Muziek OF 1980 bevatten. Ook zullen de berichten die zowel Muziek als 1980 bevatten bovenaan verschijnen omdat het een SCORE
. geeft bij elk resultaat en we sorteren op die score. Ik hoop dat het duidelijk is.
[EDIT]:2 :
Als je categorieën hebt, kun je AND Category = '$CurrentCategory'
. toevoegen in de SQL-query where clause
om meer specifieke resultaten te krijgen.
[EDIT]:3:OP kan geen volledige tekst gebruiken :
Als je Full Text (om de een of andere reden) niet kunt gebruiken, kun je gewoon 5 willekeurige berichten uit dezelfde categorie tonen. Omdat ze in dezelfde categorie vallen, zijn ze op de een of andere manier verwant aan elkaar:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Bewerkte syntaxis:LIMTI gewijzigd in LIMIT in MySQL-code