Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ricerca su più campi di una tabella

    Vorrei sapere da qualcuno se conosce il metodo per poter creare un motore di ricerca che vada a pescare su più campi di una tabella. Ovvero ho un campo text chiamato keyword vorrei far si che l'utente che inserisce una qualsiasi parola chiave la ricerca della parola viene effettuata in tutti i campi della tabella. Attualmente riesco a fare la ricerca solo un campo alla volta. Di seguito il codice per la pagina che effettua la query.

    <?
    include("config.inc.php");

    $tipologia=$_REQUEST['tipologia'];
    $note=$_REQUEST['note'];
    $genere=$_REQUEST['genere'];
    $titolo=$_REQUEST['titolo'];
    $autore=$_REQUEST['autore'];
    $anno=$_REQUEST['anno'];
    $editore=$_REQUEST['editore'];
    $recensione=$_REQUEST['recensione'];
    $email=$_REQUEST['email'];
    $categoria=$_REQUEST['categoria'];

    $stringa="&tipologia=".$tipologia."&testo=".$testo ."&genere=".$genere."&titolo=".$titolo."&autore=". $autore."&anno=".$anno."&editore=".$editore."&rece nsione=".$recensione."&categoria=".$categoria."&em ail=".$email;

    if ($_REQUEST['pagina']==""){
    $pagina=1;
    }else{
    $pagina=$_REQUEST['pagina'];
    }
    if ($que==""){
    $que="SELECT * FROM libri WHERE visibile = 'true'";
    if ($note<>""){
    $que=$que. " AND note LIKE'%".$note."%'";
    }
    if ($tipologia<>""){
    $que=$que. " AND tipologia ='".$tipologia."'";
    }
    if ($genere<>""){
    $que=$que. " AND genere LIKE'%".$genere."%'";
    }
    if ($titolo<>""){
    $que=$que. " AND titolo LIKE'%".$titolo."%'";
    }
    if ($anno<>""){
    $que=$que. " AND anno ='".$anno."'";
    }
    if ($editore<>""){
    $que=$que. " AND editore LIKE'%".$editore."%'";
    }
    if ($recensione<>""){
    $que=$que. " AND recensione LIKE'%".$recensione."%'";
    }
    if ($categoria<>""){
    $que=$que. " AND categoria ='".$categoria."'";
    }
    if ($email<>""){
    $que=$que. " AND email ='".$email."'";
    }
    if ($autore<>""){
    $que=$que. " AND autore LIKE'%".$autore."%'";
    }


    $que=$que. " ORDER BY tipologia";
    $inizio=($pagina-1)*10;
    $query2 = mysql_query ($que);
    $totali=mysql_num_rows($query2);

    ?>

    Vi ringrazio in anticipo.

  2. #2
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ciao...
    mi sto accingendo anche io a realizzare una cosa del genere...
    secondo me si può fare così:

    codice:
    $sql="SELECT * FROM tabella ";
    $sql.="WHERE visible=1 AND";
    
    // tolgo gli spazi iniziale e finale dalla keyword 
    $keywords=trim($_POST["keywords"]);
    // creo un array di parole nel caso siano più di una 
    $search=explode(" ",$keywords);
    
    // per ogni parola inserita scrivo un pezzo di query che verifica se la parola è presente in almeno uno dei campi della tabella 	
    foreach($search as $key=>$value)
      $search[$key]="(campo1 LIKE'%".$value."%' OR campo2 LIKE'%".$value."%' OR campo3 LIKE'%".$value."%')";
    
    // riunisco tutti i pezzi di query che ho creato attaccandoli l'uno all'altro tramite " AND " e li aggiungo alla query iniziale 		
    $sql.=implode(" AND ", $search);

    non ho ancora provato ad eseguire la query sul database ma ho provato a stamparla ed esce bene...
    a me sembra corretto ma ti farò sapere meglio anche se funziona...

  3. #3
    Grazie provo anche io e ti faccio sapere!

  4. #4
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    io ho provato e funziona benissimo
    posto un codice un po' più "ordinato"..

    codice:
    $sql="SELECT * FROM tabella"
    
    if($_POST["keywords"]!=""){
    	$sql.=" WHERE ";
    	$search=trim($_POST["keywords"]);
    	$search=explode(" ",$search);
    	foreach($search as $key=>$value)
            $search[$key]="(campo1 LIKE'%".$value."%' OR campo2 LIKE'%".$value."%' OR campo3 LIKE'%".$value."%')";
    		
    	$sql.=implode(" AND ", $search);		
    }

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.