2010-08-29 9 views
14

Mi stavo guardando intorno a SO e mi chiedevo come avrei potuto creare un post correlato o simile da mostrare sul mio sito web usando PHP & MySQL? Qual è un esempio di base su come farlo?Creazione di post correlati o simili usando PHP e MySQL

+0

Hai bisogno di essere più specifico. Che tipo di dati hai e come definisci un "post simile"? – casablanca

+0

@casablanca Ho tag, categorie e post con titoli e contenuto del corpo se questo è ciò che stai prendendo? – leftout

risposta

27

Utilizzando la ricerca di testo MATCH (col1,col2,...) AGAINST (expr [search_modifier]) cosa MySQL completa.

Diciamo che il tavolo è articles e avete bisogno di trovare i commenti di un titolo di corrente postale. Fai così:

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 ricordarsi di permesso di ricerca testo completo per le colonne di quel tavolo, eseguendo questa query:

ALTER TABLE articles ADD FULLTEXT (title, body); 

[EDIT]: Perché non utilizzare per LIKE: Chiarimento a OP:

Perché non darà risultati corretti. Diciamo che il tuo titolo attuale è "Music of 1980" e vuoi post correlati su questo. Ora, se usi LIKE, appariranno solo i post contenenti ESATTAMENTE la sequenza di parole "Music of 1980". Tuttavia, se si utilizza MATCH ... AGAINST, verranno visualizzati i post contenenti musica OR 1980. Inoltre, i messaggi che contengono sia musica e il 1980 apparirà in primo piano perché dà un SCORE ad ogni risultato e noi siamo l'ordinamento per quella speranza score.I questo è chiaro.

[EDIT]: 2:

Se si dispone di categorie, è possibile aggiungere AND Category = '$CurrentCategory' nella query SQL where clause per ottenere risultati più specifici.

[EDIT]: 3: OP non può usare Testo integrale:

Se non è possibile utilizzare testo completo (per qualche ragione), si può solo mostrare 5 messaggi casuali della stessa categoria. Come sono in stessa categoria, sono in qualche modo legati almeno:

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

A cura di sintassi: cambiato LIMTI a limitare, in codice MySQL

+0

Posso usare LIKE invece di FULLTEXT? – leftout

+0

@leftout, ho aggiornato la risposta. – shamittomar

+0

Ma cosa succede se non posso usare la ricerca FULLTEXT scusa per tutte le domande. – leftout