Utilizzando la ricerca MySQL Full Text MATCH (col1,col2,...) AGAINST (expr [search_modifier])
cosa.
Supponiamo che la tua tabella sia articles
e devi trovare post correlati su un titolo del post corrente. Fallo in questo modo:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Questo ti darà i primi 5 post correlati.
Ma prima ricorda di abilitare la ricerca di testo completo per le colonne di quella tabella, eseguendo questa query:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Perché non usare LIKE
: Chiarimento all'OP:
Perché non darà risultati corretti. Diciamo che il tuo titolo attuale è "Music of 1980" e desideri post correlati su questo. Ora, se usi LIKE
compariranno quindi solo i post contenenti ESATTAMENTE la sequenza di parole "Music of 1980". Tuttavia, se usi MATCH ... AGAINST
, verranno visualizzati i post che contengono Musica OR 1980. Inoltre, i post che contengono sia Musica che 1980 appariranno in alto perché danno un SCORE
a ogni risultato e stiamo ordinando in base a quel punteggio. Spero che sia chiaro.
[MODIFICA]:2 :
Se hai delle categorie, puoi aggiungere AND Category = '$CurrentCategory'
nella query SQL where clause
per ottenere risultati più specifici.
[EDIT]:3:OP non può utilizzare il testo completo :
Se non puoi utilizzare il testo completo (per qualche motivo), puoi semplicemente mostrare 5 post casuali della stessa categoria. Poiché sono nella stessa categoria, sono almeno in qualche modo correlati:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Sintassi modificata:modificato LIMTI in LIMIT nel codice MySQL