Mysql
 sql >> Database >  >> RDS >> Mysql

Creazione di post correlati o simili utilizzando PHP e MySQL

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