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'];
                    
$commentimysql_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:
$tagtitoloexplode(" "$tag); 
$tagdefinitiviimplode("%' OR '%"$tagtitolo);
$tagdefinitivi"'%".$tagdefinitivi."%'";

$vedianchemysql_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(
$correlatomysql_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...