Query ricerca

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 ;)
 

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
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:

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
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:

angel

Utente Attivo
2 Nov 2009
109
0
0
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:

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
Ciao, in tal caso devi creare qualcosa di molto piu' complesso facendo riconoscere le lettere del nome e associandole in base alle possibili varianti.
 

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
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:

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
Anche il mio è solo un esempio.
Inoltre sicuro che il mio esempio non si possa adattare al db?
 

helpdesk

Utente Attivo
30 Set 2009
726
0
0
Pesaro
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
secondo me vi state complicando la vita
PHP:
$query = "SELECT * FROM user WHERE first_name LIKE '%$search%' OR last_name LIKE '%$search%'";
 

angel

Utente Attivo
2 Nov 2009
109
0
0
@criric
Come dici tu prende tutti i record dove trova quella lettera.
Io vorrei fare una ricerca più complessa.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

angel

Utente Attivo
2 Nov 2009
109
0
0
Mi dispiace, non mi piace come soluzione.
Se mi potete dare qualche consiglio su come potrei sviluppare la mia idea.
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Menù a tendina di ricerca con query PHP 1
R Problema query con ricerca id numerico PHP 2
P Query di ricerca profonda MySQL 0
T Query per ricerca ritardo evento MS Access 7
elpirata Query di ricerca su campo date MySQL 1
elpirata Query di ricerca problema campo data italiano PHP 2
J query di ricerca PHP 17
A [RISOLTO] Query per ricerca campo timestamp MySQL 2
A [Sql/Query] Motore di ricerca PHP 1
J Query di ricerca PHP 1
A Query per ricerca PHP 2
A Ordinare query sql in base ai risultati di ricerca PHP 1
M Errore in query mysql su ricerca record PHP 3
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 26
V Query per una somma PHP 2
F stampare a video i risultati della query PHP 1
L problema con query select PHP 2
D Query sum Database 1
A form PHP prenotazione tramite query PHP 2
G Casella combinata in una query MS Access 4
R Aiuto con le query MS Access 2
Y query di DELETE PHP 4
V Query Oracle Oracle 0
L query somma PHP 8
W Query SQL Classic ASP 2
M Problemi con query a più tabelle PHP 3
Alex_70 Conteggio nella query PHP 0
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
A nome file che contiene punto passato come parametro a query PHP 31
F query e form con select multipla PHP 17
M Problema su query JOIN in tre tabelle PHP 0
M Ordinare una query join PHP 2
Alex_70 Query ORDER BY PHP 18
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
Alex_70 foreach explode query PHP 3
O query con date in formato stringa PHP 3
Tommy03 Unione query di 4 tabelle MySQL 1
Alex_70 Query group actor e film PHP 26
TpD Incolonnare risultati query (mysql_result deprecato...) PHP 3
Tommy03 Query tra 3 tabelle MySQL 2
max1974 2 query not work MySQL 3
M Ottimizzazione Query PHP 8
strambotto Query di aggiornamento MS Access 0
I Aiuto query MySQL 8
J [PHP] Visualizzare risultato query stessa pagina PHP 3
S [PHP] non prende la query PHP 0
D [PHP] Query che aggiorna tabella PHP 4

Discussioni simili