Query ricerca

  • Creatore Discussione Creatore Discussione angel
  • Data di inizio Data di inizio

angel

Utente Attivo
2 Nov 2009
109
0
0
Ciao a tutti, ho un database che contiene i seguenti campi: nome e cognome
Devo fare una query di ricerca per trovare gli utenti iscritti, ma sorge un problema molti cognomi specialmente nella tradizione italiana hanno "de o di" esempio.
Mario de luca
Francesco di giovanni

Il codice che ho scritto per ora è questo, sapete dirmi come potrei migliorarlo.
Codice PHP:
PHP:
        $suddivisa = explode(" ",strtolower($search));
        $cout = count($suddivisa);
        $campo = "";

        for($i=0;$i<$cout;$i++){
            $campo .= "(first_name LIKE '$suddivisa[$i]%' OR last_name LIKE '$suddivisa[$i]%')";
            if($i<($cout-1)) $campo .= " AND ";
        }
        
        $query = "SELECT * FROM user WHERE $campo";
Ringrazio anticipatamente ;)
 
Ciao, potresti fare così:
PHP:
<?php 
 
 $suffisso_cognome="De";
 $cognome="De Luca";
 $cognome=substr($cognome, 2);
 $Pulisci_cognome=$suffisso_cognome.$cognome;
 echo"$Pulisci_cognome";

?>

Fai scrivere nel db il cognome elimando le due lettere iniziali $cognome=substr($cognome, 2);
poi lo mostri aggiugendo il suffisso.
 
Ultima modifica:
Scusa, avevo creato una variabile superflua.
Meglio così:

PHP:
<?php 
 
 $suffisso_cognome="De";
 $cognome="De Luca";
 $cognome=substr($cognome, 2);
 $cognome=$suffisso_cognome.$cognome;
 echo"$cognome";

?>

Bada bene però che così facendo devi assicurarti attraverso dei controlli e delle logiche condizionali
che il nome immesso necessiti della scrematura altrimenti se scrivi Rossi nel db e poi mostri De Rossi
o De Luca e lui si chiamava effettivamente Rossi non è molto valido.
 
Ultima modifica:
Scusa ma non ho capito bene.
Mi serve creare un algoritmo di ricerca che identifichi la persona o le persone che soddisfano tale ricerca.
Ti faccio un esempio, nel mio db ho:
PHP:
name|surname
paolo giovanni|carini
paolo|de luca
luca francesco| di giovanni
Se scrivo pao dovrebbe darmi -> paolo giovanni carini e paolo de luca
Se scrivo luc dovrebbe darmi -> paolo de luca e luca francesco di giovanni
Se scrivo giovan dovrebbe darmi -> paolo giovanni carini e luca francesco di giovanni
Se scrivo frances o francesco d dovrebbe darmi -> luca francesco di giovanni
Se scrivo d dovrebbe darmi -> paolo de luca e luca francesco di giovanni

Questi sono solo esempi di come vorrei impostare l'algoritmo

Spero di essermi spiegato bene. :D
 
Ultima modifica:
Ciao, in tal caso devi creare qualcosa di molto piu' complesso facendo riconoscere le lettere del nome e associandole in base alle possibili varianti.
 
Potresti creare qualcosa di questo tipo ma dovrai aggiungere piu' varianti e filtrare meglio le lettere per ottenere risultati come Givanni De Luca.

PHP:
<?php 
  
  $conta_lettere = array
 ("Paolo Giovanni","Carini Paolo",
  "De luca ","luca francesco","Di Giovanni"); 
  $conta = count($conta_lettere);
  
 $nomi = array
 ("Paolo Giovanni","Carini Paolo",
  "De luca ","luca francesco","Di Giovanni"); 
 
 $conta="luc";

 if($conta=="pao"){
   echo"$nomi[0] <br>" ;
   echo"$nomi[1] <br>" ;
   echo"$nomi[2] <br>" ;
 }else if($conta=="luc"){
   echo"$nomi[2] <br>" ;
   echo"$nomi[3] <br>" ;
 }

?>
 
Ultima modifica:
Potresti fare anche così:
PHP:
<?php 

// Questa sarebbe la query di Select 
  $sql = mysql_query("SELECT utenti FROM nomi WHERE nome REGEXP '^S'");
// Questo Sarebbe il risultato della query di SELECT.
  $nomi = array("Sonia","Simona","Siria ","Sandra","Saverio"); 
// Converti in Stringa l'array "rusltato della query di SELECT".
  $stringa = implode(',', $nomi);
// Questo sarebbe il nome scritto nel campo imput del form.
  $Nome_scritto="Sandra";
// Logica condizionale che riconosce il nome e associa tutti i risultati della query.
 if (!ereg($Nome_scritto,$stringa)) { 
  echo "Nessun risultato $Nome_scritto";
  } else {
     echo "Con il Nome: $Nome_scritto<br>  
	      Ho trovato i seguenti risultati:<br> 
	      $stringa";
  }

?>
 
Ultima modifica:
Ciao,
secondo me vi state complicando la vita
PHP:
$query = "SELECT * FROM user WHERE first_name LIKE '%$search%' OR last_name LIKE '%$search%'";
 
@criric
Come dici tu prende tutti i record dove trova quella lettera.
Io vorrei fare una ricerca più complessa.
 
Se scrivo pao dovrebbe darmi -> paolo giovanni carini e paolo de luca
Se scrivo luc dovrebbe darmi -> paolo de luca e luca francesco di giovanni
Se scrivo giovan dovrebbe darmi -> paolo giovanni carini e luca francesco di giovanni
Se scrivo frances o francesco d dovrebbe darmi -> luca francesco di giovanni
Se scrivo d dovrebbe darmi -> paolo de luca e luca francesco di giovanni
queste te le risolve tutte
 
Mi dispiace, non mi piace come soluzione.
Se mi potete dare qualche consiglio su come potrei sviluppare la mia idea.
 

Discussioni simili