Page 1 sur 1

exclure une chaine de caractère

Posté : 17 nov. 2009, 13:49
par x@v
Bonjour,
je cherche à exclure des résultats du champ mailProf.
C'est une chaine de caractère qui contient le mot avec des chiffres dont je ne connais pas ni le nombre ni la valeur:
'%mailEnEttente%'
j'essaie d'utiliser
NOT LIKE '%mailEnEttente%'
Mais cela me renvoie malgrés tout des champs avec 'mailEnEttente'
		$sql="SELECT * FROM profmusique WHERE codePostalProf LIKE '".$departement."%' 
               AND mailProf NOT LIKE '%mailEnEttente%'
		AND instrumentPrincipalProf='".$_POST['instrumentRechercher']."' 
		or discipline1Prof='".$_POST['instrumentRechercher']."' 
		or discipline2Prof='".$_POST['instrumentRechercher']."'
		or discipline3Prof='".$_POST['instrumentRechercher']."'
		or discipline4Prof='".$_POST['instrumentRechercher']."' 
		ORDER BY villeProf ASC";
Merci

Re: exclure une chaine de caractère

Posté : 17 nov. 2009, 14:06
par animithra
Bonjour.

Je n'ai pas de solution dédiée à te proposer en SQL mais tu peux très bien trouver ta chaîne de caractères en PHP.

Si la chaîne est encadrée par des chiffres, tu peux trouver la position de la première lettre en faisant une boucle (TANT QUE le caractère au rang x est un chiffre FAIRE x=x+1).

Une fois la 1re lettre trouvée, tu récupères toute la chaine via un substring (en bouclant tant qu'il ne retrouve pas de chiffre).

Maintenant je prétends pas (et je suis même persuadée du contraire XD) que ce soit la méthode la plus optimisée...
Cela dit, c'est fonctionnel, et ça te laissera du temps pour chercher mieux.

Bonne progra ;)

Re: exclure une chaine de caractère

Posté : 17 nov. 2009, 14:25
par x@v
j'yavais penser à substr(), mais la performance est surement du coté de sql et ça m'interresse d'y arriver

Re: exclure une chaine de caractère

Posté : 17 nov. 2009, 14:59
par animithra
Les résultats qui te sont retournés malgré tout contiennent exactement ta chaîne ou toujours un assemblage chiffres + chaîne ?

Si tu peux donner tes entrées dans la base et les résultats obtenus après requête, je suis preneuse ;)

Re: exclure une chaine de caractère

Posté : 17 nov. 2009, 15:41
par animithra
[RE-EDIT]
Remarque, pas si stupide que ça...
Mets des parenthèses à ta dernière condition AND (condition OR condition...)

Sinon si ça ne fonctionne toujours pas

Pour éliminer les mauvaises pistes, essaie en ne mettant que ton NOT LIKE en condition dans ta requête et regarde si tu as des résultats éronnés.
S'il y en a... on est mal XD mais tu pourras tester en ajoutant "AND NOT LIKE '%mailEnEttente' AND NOT LIKE 'mailEnEttente%'
Si tu n'en a pas, ça vient de quelque part dans le cumul des conditions (et mon ancienne réflexion sur les OR ne sera plus aussi stupide)

Re: exclure une chaine de caractère

Posté : 17 nov. 2009, 17:36
par ouckileou
Les résultats renvoyés ne contiendraient-il pas "mailEnAttente" alors que tu exclus dans ta condition "mailEnEttente" ?

Teste une requête statique directement sur la base (ex: via phpMyAdmin). Quand elle marchera alors tu pourras l'intégrer dans le PHP.

Pour un problème de SQL sur le forum il faut toujours fournir le SQL généré, la ligne de PHP qui va le construire est moins utile que le code qui sera effectivement exécuté sur la base.

Re: exclure une chaine de caractère

Posté : 18 nov. 2009, 16:15
par animithra
Pas sûr ouckileou, il devrait avoir une erreur pour colonne non existente le cas échéant non ?

Re: exclure une chaine de caractère

Posté : 18 nov. 2009, 16:36
par ouckileou
Pas sûr ouckileou, il devrait avoir une erreur pour colonne non existente le cas échéant non ?
Je ne pense pas car c'est une valeur et non une colonne :)

Re: exclure une chaine de caractère

Posté : 18 nov. 2009, 21:17
par animithra
+1

Bien vu, je suis de plus en plus fatiguée à ce que je vois T_T

en tout cas j'espère qu'il aura fini par se corriger.... et surtout qu'il testera petit à petit dans phpMyAdmin la prochaine fois (valable pour tout le monde hein ;))