Comparer un champ avec une chaine convertie directement dans une requete

Eléphant du PHP | 91 Messages

28 août 2007, 13:43

Hello,

J'ai besoin de récupérer un champ seulement si sa valeur concorde avec une certaine chaine.

Seulement ma chaine est convertie et n'a plus d'accents afin de pouvoir passer proprement par URL.

Il faudrait donc que je test avec le champ lui aussi converti. Seulement je ne vois pas comment faire ça directement dans la requête.

Ma requete :

Code : Tout sélectionner

SELECT products_name FROM products WHERE products_name = " . $chaine . "
Qui ne retournera jamais rien puisse que product_name est accentué alors que $chaine ne l'est pas.
Il faudrait pouvoir faire quelque chose comme :

Code : Tout sélectionner

SELECT products_name FROM products WHERE convertion(products_name) = " . $chaine . "
Merci de votre aide
:wink:

ma SGBD : mySQL.
Modifié en dernier par Tong le 28 août 2007, 15:02, modifié 1 fois.

Mammouth du PHP | 684 Messages

28 août 2007, 14:03

Salut.

Pourquoi ne pas nettoyer ton résultat de requête avec la même fonction qui te nettoie ton nom dans l'url ?
Zigz4g

Eléphant du PHP | 91 Messages

28 août 2007, 14:09

Je ne veut retourner que les t-uples qui m'intéressent et donc mettre une clause de comparaison directement dans la requete.

Le but n'est pas d'avoir un résultat sans accents mais de faire la comparaison d'une chaine accentué avec la même désaccentué.

Enfin a priori j'ai trouvé la solution avec la fonction REPLACE()

http://www.toutestfacile.com/sql/cours/ ... ing_3.php5

Bon c'est pas encore codé, je ne mets pas résolu, je vais peut-être repasser par là :wink:

EDIT -----
C'est en fait TRANSLATE() qui est approprié
Modifié en dernier par Tong le 28 août 2007, 14:16, modifié 2 fois.

Eléphanteau du PHP | 35 Messages

28 août 2007, 14:10

Dans ta base de donnée, ta colonne est de quel type ?

Car, peut-être veis-je dire une bétise, mais une colonne de type varchar se moque de la casse et donc des accents.

Eléphant du PHP | 91 Messages

28 août 2007, 14:24

A ouais effectivement, ca marche sans conversion (bon ça marche aussi avec :wink:)

J'ai donc juste les espace à gérer et ça ca pose pas de problème.

Merci :!:

Et donc un champ de type varchar stocke les chaines en conservant les accents mais n'en tiens pas compte ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2007, 14:48

Petite précision, c'est MySQL qui n'en tient pas compte dans ses recherches et comparaisons. Ce n'est absolument pas une propriété du varchar et toute autre base de données exigera une correspondance exacte.

Mais sinon pourquoi ne pas conserver la chaine d'origine quelque part ? au pire tu peux faire un urlencode()/urldecode() pour passer un paramètre via l'url sans l'altérer (ou l'envoyer en post, ou le coller en session, ...) du coup tu pourrais faire une recherche à l'identique et t'éviter des transformations de chaine à la volée qu'il te faudra maintenant en sql et en php :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 91 Messages

28 août 2007, 15:01

Je reconnais que je pourrais me simplifier la vie avec un bete urlencode(), mais ca va peut-etre être plus pratique lorsque je mettrais en place l'url rewritting si mes variables ne ressemblent pas à %20hop%50%_la.

Et merci de la grande précision :wink: