ho un blog dove gli articoli sono in un db mysql. ogni record corrisponde a un articolo..
ci sono vari campi di questi record tra cui titolo contenuto e altre cose e anche i tag....
la mia idea è sfruttare i tag per identificare gli articoli correlati all'articolo che l'utente legge facendo un confronto tra i tag dell'articolo e gli altri articoli...allora ho buttato giù questo codice
questo è lo sviluppo dell'articolo: come si può notare nel while richiamo il campo tag...se facessi echo $tag mi uscirebbe qualcosa del tipo: parola1 parola2 parola3.
cioè parole separate da spazio.
Codice PHP:
$query= "SELECT *, DATE_FORMAT(datetime,'[b](%d.%m.%Y[/b] - [b]%H:%i:%s)[/b]') as datatime FROM articoli WHERE sezione='0' AND id=$pag LIMIT 1";
$risultato = mysql_query($query);
// fine selezione articoli --------------------------------------------------
$flag_colore=0;
while($articles=mysql_fetch_array($risultato)){
$titolo=$articles['titolo'];
$content=$articles['content'];
$url=$articles['url'];
$materia=$articles['materia'];
$id=$articles['id'];
$si=$articles['si'];
$no=$articles['no'];
$datetime= $articles['datatime'];
$preview= $articles['preview'];
$commenti= mysql_query("UPDATE articoli SET commenti=$n_commenti WHERE id = '$pag'");
if(isset($_GET['segnala']) AND $_GET['segnala'] == 1){
include("segnala_art.php");
}
else{
include("page.php");
echo $pagea;
echo "<h1>".ucfirst($titolo)."</h1><div class=\"corp\"><div class=\"cont2\">$preview</div></div>
";
// colore alternato
if($flag_colore==0){
$flag ="<div class=\"cont1\">";
$flag_colore=1;
}
else{
$flag= "<div class=\"cont2\">";
$flag_colore=0;
}
// pagine sviluppate
echo "<a name=\"articolo\"></a>";
echo "<div class=\"corp\">";
echo "<div class=\"cont1 tornasu\">";
echo "<a href=\"../all.php\">Tutti gli articoli</a>";
echo "</div>";
echo "<div class=\"cont2\">";
echo "<div class=\"inter\">";
echo "<div class=\"left\">";
include ("vota.php");
echo "</div>";
echo "<div class=\"right\">
Pubblicato in <a href=\"http://www.atuttascienza.altervista.org/ricerca.php?search=$materia\">".ucfirst($materia)."</a> $datetime
<a href=\"$path&segnala=1\">Segnala ad un amico</a> |
<a href=\"#commenti\">Commenta</a> [b]($n_commenti $show_commenti)[/b]
<a href=\"javascript:window.print()\">Versione stampa</a> |
<a href=\"javascript:bookmarksite('Atuttascienza..nel mare del sapere','http://$path')\">Aggiungi a preferiti</a></div>";
echo "<div class=\"clear\"></div>
";
$testo= $content;
include ("replace.php");
echo "</div></div>";
echo "<div class=\"cont1 tornasu\">";
echo "<a href=\"../all.php\">Tutti gl articoli</a> | <a href=\"#articolo\">Torna su</a>";
echo "</div>";
echo "</div>";
echo "
";
include("commenti.php");
echo $pagea;
include("correlati.php");
echo "
";
}
}
sopra si può notare come richiamo il codice per gli articoli correlati con include correlati.php
questo è il file correlati.php
Codice PHP:
$tagtitolo= explode(" ", $tag);
$tagdefinitivi= implode("%' OR '%", $tagtitolo);
$tagdefinitivi= "'%".$tagdefinitivi."%'";
$vedianche= mysql_query("SELECT titolo,url FROM articoli WHERE tag LIKE $tagdefinitivi ORDER BY rand()");
if(mysql_num_rows($vedianche) > 0){
echo "<h1>Vedi anche...</h1>";
echo "<div class=\"corp\"><div class=\"cont2\">";
while($correlato= mysql_fetch_array($vedianche)){
$titolo= $correlato['titolo'];
$url= $correlato['url'];
echo "<a href=\"$url\">" .ucfirst($titolo). "</a>
";
}
echo "</div></div>";
}
prelevo il $tag che abbiamo detto sarà una cosa del tipo parola1 parola2 parola3
invece degli spazi inserisco or e relativi apici e % e alla fine ottengo
'%parola1%' or '%parola2%' ecc in modo da poterlo inserire nel where della query postata nel codice
il problema che quando vado testarlo non credo che funzioni bene...
ho creato 5 articoli di prova
questi i relativi tag
1 vita extraterrestre alieno
2 vita
3 alieno
4 vita alieno
5 alieno
se io vado nel primo articolo dovrebbe trovarmi tutti e 4 gli articoli come correlati..sbaglio?
invece me ne ritrovo 3.
però mi è sorto un dubbio non è che l'articolo 4 lo conta due volte poi? dato che ha vita e alieno
ho notato una cosa che quando l'articolo ha un solo tag la ricerca funziona...almeno credo...quindi l'errore sta su come ho scritto il where?
spero di essere stato chiaro...