Una query problematica

  • Creatore Discussione Creatore Discussione zerobit
  • Data di inizio Data di inizio

zerobit

Utente Attivo
10 Mar 2012
35
0
0
Salve ragazzi , potreste aiutarmi a risolvere un fastidioso problema ?

Un esempio vale più di 999 parole .....

PHP:
$abc = "SELECT accessori FROM nuovo WHERE (auto LIKE '%" .$termine[0]. "%')";

Supponiamo che nel campo AUTO vi sia il termine mercedes

L'utente digita mercedes e la query va a buon fine . :fonzie:

Se però nel form digito merce mi tira fuori i risultati per mercedes !! :crying:

Come potrei risolvere prima di buttarmi dalla finestra ?
 
Ultima modifica di un moderatore:
Se però nel form digito merce mi tira fuori i risultati per mercedes !
il LIKE ha questa funzionalita

tu cosa vorresti estrarre? i risultati con solo merce?
allora devi usa 'loperatore di uguaglianza =

PHP:
$abc = "SELECT accessori FROM nuovo WHERE auto = '" .$termine[0]. "'";
 
A dire il vero mi era venuto in mente di usarlo , ma visto che il campo conteneva anche altri termini , pensavo che avrebbe creato dei problemi , poi quando mi si abbassa il livello di zuccheri nel sangue faccio fatica a riflettere e vado nel pallone

Grazie mille Criric adesso è tutto a posto Ciao ! :elvis:
 
Ultima modifica di un moderatore:
Help ! Sembrava tutto a posto , purtroppo è sorto un'altro problema , la query non restituisce sempre un risultato se nel campo AUTO ci sono diversi termini , ad esempio :

panda mercedes punto bravo astra audi

Mentre se c'è ne solamente uno non fa tante storie


Da cosa potrebbe dipendere ?

Devo buttarmi un'altra volta dalla finestra ? :crying:
 
Va bene o chiuso la finestra .

Allora , il campo AUTO potrebbe contenere solo il termine :

mercedes

oppure vari termini ad esempio :

panda mercedes punto bravo astra audi


In entrambi i casi la query deve estrarre i rercord


Allo stato attuale recuperi tutti i record il cui valore del campo AUTO è mercedes

E quindi che dovrei fare ?
 
Ultima modifica di un moderatore:
Torna al LIKE, ma aggiungi gli spazi:
PHP:
$abc = "SELECT accessori FROM nuovo WHERE auto LIKE '% {$termine[0]} %' OR auto = '{$termine[0]}'";
P.S. Ma perché metti tutto quello spazio alla fine del post? Rende più difficoltosa la lettura.
 
Niente da fare , non va


In pratica dovrei dirgli di estrarre i record

se almeno uno dei termini digitati nel form

è presente nel campo AUTO


O per meglio dire se il termine [0] , ( e via dicendo ) è presente nel solito campo


Come glielo dico con una query ?


Ok mi scuso per lo spazio
 
Ultima modifica:
1) prendi i valori del campo auto;
2) li metti in un array dividendoli con explode;
3) controlli se la parola inserita dall'utente è contenuta nell'array.
 
Richiede troppe risorse: bisognerebbe estrarre ogni record e poi processarli uno a uno.

Questo dovrebbe andare:
Codice:
SELECT * FROM accessori WHERE (auto LIKE '% mercedes') OR (auto LIKE 'mercedes %') OR (auto = 'mercedes')

Oppure puoi provare con le espressioni regolari:
Codice:
SELECT * FROM accessori WHERE auto REGEXP '([:alpha:][:space:])?mercedes([:alpha:][:space])?'

Le espressioni regolari sono la soluzione più elegante.

Ho testato entrambi i metodi.
 
ciao
potresti provare una cosa del genere
PHP:
<?php
//qui trovo i record in cui c'è merce o mercedes o seat mercedes panda pemdolino
$abc = "SELECT id, auto FROM nuovo WHERE auto LIKE '% {$termine[0]} %'";
$query= mysql_query($abc);
while ($riga=mysql_fetch_array($query)){
	$auto=$riga['auto'];
	$pos = strpos($auto, $termine[0]);//per caseinsensitive stripos
	if($pos !== false){//qui verifico che si tratti di mercedes e non di merce attenzione uguaglianza anche per tipo !== non !=
		$vari_id[]=$riga['id'];
	}
}
//qui estraggo gli accessori relativi al termine mercedes (e non merce)
if(is_array($vari_id)){
	echo "l'auto $auto ha gli accessori:<br>";
	foreach($vari_id as $id){
		$def = mysql_query("SELECT accessori FROM nuovo WHERE id= $id");
		$riga_2=mysql_fetch_array($def);
		echo $riga_2['accessori']."<br>";
		
	}
}else{
     echo "corrispondenza non trovata";
}
?>
al massimo non funzia
 
Dopo vari tentativi ho scelto la regex , semplice ed efficace , comunque
trovo interessanti anche le altre idee che mi sono state suggerite , c'è
soltanto una cosa che mi lascia perplesso : :crying:

Se per praticità con un copia e incolla da notepad riporto i dati nel campo 2 ( accessori ) e poi sempre dal form taglio e incollo nel campo 1 ( auto ) , la query non mi estrae i record da DB.

Se inserisco invece i dati separatamente , incollando sempre da notepad prima in un campo e poi nell'altro allora funziona .


Vi è già capitato ?


Qualcuno saprebbe dirmi perchè capitano tutte a me ?



Grazie ragazzi per le risposte e per il vostro aiuto , finalmente posso continuare a lavorare senza pesi sul capoccione ! :fonzie:
 
posta la tua soluzione, può servire a qualcun'altro.

Ciao borgo italia scusa , intendevo la REGEX postata da alessandro1997


forse ti trascini qualche carattere che non ci dovrebbe essere

Il bello è che altri caratteri non ce ne sono , almeno in apparenza .....


Ciao e grazie anche a te ! :byebye:
 

Discussioni simili