Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen verwandter oder ähnlicher Beiträge mit PHP und MySQL

Mit der MySQL-Volltextsuche MATCH (col1,col2,...) AGAINST (expr [search_modifier]) Sache.

Nehmen wir an, Ihre Tabelle ist articles und Sie müssen verwandte Beiträge zu einem Titel des aktuellen Beitrags finden. Gehen Sie folgendermaßen vor:

SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles 
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle') 
ORDER BY score DESC LIMIT 5

Dadurch erhalten Sie die Top 5 der verwandten Beiträge.

Denken Sie jedoch zuerst daran, die Volltextsuche für die Spalten dieser Tabelle zu aktivieren, indem Sie diese Abfrage ausführen:

ALTER TABLE articles ADD FULLTEXT (title, body);

[BEARBEITEN]:Warum man LIKE nicht verwendet : Erläuterung zu OP:

Weil es keine korrekten Ergebnisse liefert. Angenommen, Ihr aktueller Titel lautet „Music of 1980“ und Sie möchten verwandte Beiträge dazu. Nun, wenn Sie LIKE verwenden dann erscheinen nur die Beiträge, die GENAU die Wortfolge "Music of 1980" enthalten. Wenn Sie jedoch MATCH ... AGAINST verwenden , dann werden Beiträge angezeigt, die Music OR 1980 enthalten. Außerdem werden die Posts, die sowohl Musik als auch 1980 enthalten, oben angezeigt, da sie eine SCORE ergeben zu jedem Ergebnis und wir sortieren nach dieser Punktzahl. Ich hoffe, das ist klar.

[BEARBEITEN]:2 :

Wenn Sie Kategorien haben, können Sie AND Category = '$CurrentCategory' hinzufügen in der SQL-Abfrage where clause um spezifischere Ergebnisse zu erhalten.

[EDIT]:3:OP kann Volltext nicht verwenden :

Wenn Sie (aus irgendeinem Grund) keinen Volltext verwenden können, können Sie einfach 5 zufällige Beiträge aus derselben Kategorie anzeigen. Da sie sich in derselben Kategorie befinden, sind sie zumindest irgendwie verwandt:

SELECT *
FROM articles 
WHERE Category = '$CurrentCategory'
LIMIT 5

Bearbeitete Syntax:LIMTI im MySQL-Code in LIMIT geändert