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

    [PHP/MySql] – Ricerca con più chiavi

    Vorrei realizzare una (o più “se necessario”) query che mi permetta di ricercare un annuncio con più chiavi.
    Il mio script:
    Codice PHP:
    <?php 
    // search with more keys
        
    function more_keys($str) {
        
    // articoli determinativi e indeterminativo (da rivedere).
            
    $eccezioni = array(" in "," con "," su "," per "," tra "," fra "," di "," a "," e "," i "," o "," u "," da "," di "," della "," delle "," un "," una "," uno "," piu' "," più "," per "," dai "," ad "," ed "," dello "," al "," allo ");
            
    $field = array("titolo""testo""tel");
            
    $str_temp str_replace$eccezioni" "$str);
            
    $pieces explode(chr(32), $str_temp);
            print 
    '<pre>';
                
    print_r($pieces);
            print 
    '</pre>';
        return 
    $pieces;
        }
    // ---
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('chiave'$_POST) ){
        
    $chiave trim($_POST['chiave']);
        
    more_keys($chiave);
    } else {
        
    $chiave "Milano attico con vista Duomo";
    }
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        key:

        <input name="chiave" type="text" value="<?= $chiave?>" />
        <input name="Invia" type="submit" value="Invia" />
    </form>

    Risultato:
    Codice PHP:
    Array
    (
        [
    0] => Milano
        
    [1] => attico
        
    [2] => vista
        
    [3] => Duomo


    struttura tabella:
    Tabella:annunci
    campi in cui effettuare la ricerca:titolo | testo | tel

    Vorrei che il risultato della query mi restituisca in ordine (come array risultato) tutti gli annunci che contengono tutti i valori compresi tra 0 e 3
    fino ad arrivare all'ultimo risultato che conterrà solo i valore 3 un po come fa Google.

    cichity74

  2. #2
    up :rollo:

  3. #3
    Codice PHP:
    <?php 
    // search with more keys
        
    function more_keys($str) {
            
    $rubrica "3A";
            
    $where "SELECT * FROM `annunci` WHERE ((`rubrica` = '".$rubrica."')";
        
    // Articoli determinativi etc
            
    $eccezioni = array(" il "," lo "," la "," i "," gli "," le "," in "," con "," su "," per "," tra "," fra "," di "," a "," e "," o "," u "," da "," di "," della "," delle "," un "," una "," uno "," piu' "," più "," per "," dai "," ad "," ed "," dello "," al "," allo ");
            
    $field = array("`titolo`""`testo`""`tel`");
            
            
    $str_temp str_replace$eccezioni" "$str);
            
    $pieces explode(chr(32), $str_temp);
            
    $len_pieces = (count($pieces)-1);
            
    $len_field = (count($field)-1);
            
    $where .= " AND (((".$field[0]." like '%".$pieces[0]."%')";
            for (
    $i 1$i <= $len_pieces$i++) {
                
    $where .= " AND (".$field[0]." like '%".$pieces[$i]."%')";
            }
            
    $where .= ") ";
            for (
    $k 0$k <= $len_field$k++) {
                
    $where .= " OR ((".$field[$k]." like '%".$pieces[0]."%')";
                for (
    $l 1$l <= $len_pieces$l++) {
                    
    $where .= " AND (".$field[$k]." like '%".$pieces[$l]."%')";
                }
            
    $where .= ")";
            }
            
    $where .= "))";
            print 
    '<pre>';
                
    print_r($pieces);
            print 
    '</pre>';
            echo 
    "<hr>";
            
    print_r($where);
        return 
    $where;
        }
    ?>
    <?php 
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('chiave'$_POST) ){
        
    $chiave trim($_POST['chiave']);
        
    more_keys($chiave);
    } else {
        
    $chiave "milano appartamento centro";
    }
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        key:

        <input name="chiave" type="text" value="<?= $chiave?>" />
        <input name="Invia" type="submit" value="Invia" />
    </form>
    Risultato:
    codice:
    SELECT * FROM `annunci` WHERE ((`rubrica` = '3A') AND (((`titolo` like '%milano%') AND (`titolo` like '%appartamento%') AND (`titolo` like '%centro%')) OR ((`testo` like '%milano%') AND (`testo` like '%appartamento%') AND (`testo` like '%centro%')) OR ((`tel` like '%milano%') AND (`tel` like '%appartamento%') AND (`tel` like '%centro%'))))


    non è bellissima come query anzi....
    la sintassi è oscena e i risultati discutibili...
    esiste il modo di concatenare i tre campi in uno con AS in modo da semplificare la query e poter lavorare su una sorta di punteggio "incidenza" del/dei termini ricercati

    cichity74

  4. #4
    up

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.