Fonction ne tenant pas compte de la casse [Fermé]

Signaler
-
 java -
Bonjour, je souhaiterai savoir s'il existe un fonction en php ou en sql pour ne plus tenir compte de la casse (ne plus tenir compte de la différence majuscule/minuscule), les fonctions upper() et lower() ne fonctionnent pas puisqu'elles mettent en minuscule ou en majuscule toute la chaine or dans ma bdd, les noms des commerces sont écrit en majuscule et en minuscule.

Je m'explique, je dois faire un site qui regroupe tous les commerces de la ville. Dans un formulaire php, on doit rentrer le nom d'un commerce, ensuite je dois interroger ma base de données. Par exemple, un utilisateur rentre "chez toto" seulement dans ma bdd le commerce ce nomme "chez Toto" mais je dois quand même afficher les informations concernant "chez Toto" bien qu'il n'ait pas entré le nom correctement. Ainsi je ne dois pas tenir compte de la casse.

J'espère avoir été assez clair

Auriez-vous une idée svp?

merci d'avance

15 réponses

Non, elle n'est pas correcte car
1) comme constaté dans ton post #5 et expliqué dans mon post #6, en MySQL, tu n'as pas le droit d'utiliser || comme opérateur de concaténation puisqu'il symbolise déjà le OU logique. Tu dois utiliser la fonction CONCAT().
2) en supposant que les apostrophes (') qui encadrent nom_com dans ta requête sont en fait des délimiteurs de colonne (comme le ' sous Linux), tu exiges dans ta requête que la colonne nom_com contienne '||upper(' suivi du nom du commerce saisi suivi de ')||' (tu as écrit upper dans la chaine) tout en demandant que le nom du commerce saisi soit égal à nom_com.
2bis) si les apostrophes sont bien des délimiteurs de chaine, tu cherches à savoir si '||upper(' suivi du nom du commerce saisi suivi de ')||' est compris dans la constante 'nom_com'
3) Si t'as copié/collé ta requête, alors il y a souci car ton tout dernier nom_com est précédé d'une apostrophe sans correspondance.

Avec un peu plus d'attention, tu aurais écrit
Select *
From t1
where upper(nom_com) like upper(concat('%','$NomCommerce','%'))

[EDIT] j'enlève les accents graves autour de nom_com car ils servent à rien et sont affichés en apostrophes par CCM
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60531 internautes nous ont dit merci ce mois-ci

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 296
Bonjour,

Pourquoi ne pas faire tout simplement ceci
select * from nomtable where upper(nomcommerce) = upper(nomintroduit)


A plus
Salut,

pour compléter la suggestion de Christounet:

tu peux aussi utiliser un motif
select *
from nomtable
where upper(nomcommerce) like '%'||upper(nomintroduit)||'%'

le but est de comparer les chaines sans toucher aux données de la base ou celles saisies par l'utilisateur

Merci à vous 2, mais j'ai fais un copier/coller de fiu et rajouté un";" mais j'ai une erreur de syntaxe et je ne vois pas pourquoi, pourriez-vous m'aider svp

merci
Salut,

Surtout ne dis rien ! laisse-nous deviner...
Messages postés
626
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
20 août 2019
21
J'ai trouvé l'erreur mais çà n'affiche pas ce que je veux, çà me met :

Unknown column 't' in 'where clause'

(Colonne inconnue 't' dans ' où clause ')

alors que j'ai un commerce qui commence par "T"

ainsi que:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4

(Vous avez une erreur dans votre syntaxe de SQL; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la syntaxe juste pour utiliser près ') || ' le % "à la ligne 4)
Salut,

Unknown column 't' in 'where clause'
=> Colonne T inconnue dans la clause WHERE
==> tu utilises une colonne T qui n'est pas disponible dans les tables que tu requêtes

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4
=> (la traduction est acceptable)
==> || est l'opérateur SQL pour la concaténation de chaînes. Manque de bol, en MySQL, il désigne le OU logique. Pour la concaténation de chaînes en MySQL, il faut utiliser CONCAT().

Auriez-vous une autre méthode pour ne pas tenir compte de la casse?

merci
Salut,

Pourquoi une autre méthode ? ça ne te convient pas ?
Messages postés
626
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
20 août 2019
21
Nan çà ne fonctionne pas, je l'ai mise dans une requête, pas d'erreur mais çà ne tient pas compte de la casse
Sisi, la fonction UPPER() convertit la chaine en majuscules. Et si tu veux comparer des chaines sans tenir compte de la casse, les seuls choix possibles sont de comparer 2 chaines majuscules ou 2 chaines minuscules.

Ensuite, je serais assez curieux de voir ta requête pour comprendre comment tu peux assurer que UPPER() ne fonctionne pas...
Messages postés
626
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
20 août 2019
21
Dit moi si jme troupe, mais la fonction UPPER() met toute la chaîne de caractère en majuscule puis la compare à la chaine de caractère de ma bdd?
Non pas du tout, la fonction UPPER() se contente de convertir en majuscules la chaine passée en argument.
Si tu veux comparer 2 chaines sans tenir compte de la casse, c'est (en SQL) :
... AND Upper(exprChaine1) = Upper(exprChaine2)

si exprChaine1 représente Coiffeur et ExprChaine2 représente cOIffEUr alors la condition sera vérifiée.
Messages postés
626
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
20 août 2019
21
cette requête est-elle correcte??

"SELECT *
FROM t1
WHERE 'nom_com'
LIKE '%||upper($NomCommerce)||%'
AND Upper($NomCommerce) = Upper('nom_com)
";
Messages postés
626
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
20 août 2019
21
merci problème résolu
j'ai pas trouver moi pourrez vous m'aider j'ai le mm prob
merci