Page 1 sur 1

probleme requete sql

Posté : 02 févr. 2007, 14:14
par eddi
voici une requete sql
$req="select id, id_pays, code, mdp, nom, ind_valide, id_parrain, contact_civilite, contact, logo,telephone ";

        $req.="from admin_societe ";

        $req.="where id is not null ";

        if ($fltENTPid)        {$req.="and id=".$fltENTPid." ";}

        if ($fltENTPnom)    {$req.="and nom like '%".$fltENTPnom."%' ";}

        if ($fltENTPcode)    {$req.="and code like '%".$fltENTPcode."%' ";}

        if ($fltENTPmail)    {$req.="and adressemail like '%".$fltENTPmail."%' ";}
        
        if ($fltENTPtelephone)    {$req.="and REPLACE(telephone,'.','')  like '%".$fltENTPtelephone."%' ";}

        $req.="order by nom ";

Le probleme c'est sur le champ numéro de telephone
ce que je veu faire cest de formaté le numéro de telephone venant de ma bdd cest à dire supprimer les espaces, suprimer les tirets, les slashs, enlevé le +33 pour le format internationnal
par exemple
01 23 45 67 89 changé en 0123456789
01.23.45.67.89 changé en 0123456789
01-23-45-67-89 changé en 0123456789
01-2345 6789 changé en 0123456789
+33123456789 changé en 0123456789
01/23/45/67/89 changé en 0123456789

le requete ci dessus marche mais seul pour la suppression des points cest a dire il change 01.23.45.67.89 en 0123456789
Comment faire pour formaté en même temps la chaine ? est ce qu'on peut utiliser plusieur REPLACE dans une seul requete?



Le but est de faire une recherche par numéros de telephone et dans le champs numéros de tel l'utilisateur ne va taper que 0123456789 mais pas des numéros avec des espaces ou point ou tirets ...... or dans ma base de donnée les numeros de telephone ont des formats differents : numero avec des espaces ,avec des tirets , avec des points ..............

merci pour votre aide

Posté : 02 févr. 2007, 17:04
par AB
Bonjour,

Le plus simple serait de formater les numéros de téléphone à l'insertion dans la base de donnée.
Pour enlever tous les caractères non numériques :
$tel = '+33_ 52 / 14 - 86.65/92';
$newtel = eregi_replace("[^0-9]", "", $tel);
S'il sont déjà dans ta base de donnée tu pourrais updater ta base sur le champ téléphone avec l'expression précédente.

Ensuite ta requête sera optimisée

Posté : 02 févr. 2007, 17:31
par Jean
Bien sûr qu'il est possible de faire des replace imbriqués

Code : Tout sélectionner

replace(replace(replace(telephone, '.', ''), '/', ''), '+33', '0')
Mais l'avis ci-dessus est quand même pertinent : il vaut mieux UN seul traitement de mise en forme à l'enregistrement, que PLUSIEURS traitements pour CHACUN des enregistrements a CHAQUE affichage.

Posté : 02 févr. 2007, 18:18
par Ryle
Modération :
eddi, le multipostage est interdit sur le forum.

Merci de prendre le temps de lire les règlements.

Posté : 05 févr. 2007, 09:18
par eddi
Bonjour
Oui je m'excuse pour le multipostage ca ne se reproduira plus

Pour la requete ca marche mais pour la podification de l'espace ca ne marche pas :

Code : Tout sélectionner

replace(telephone, '', '')
cest à dire remplacer 01 23 45 67 89 en 0123456789

Merci

Posté : 05 févr. 2007, 09:37
par eddi
jai trouvé

au lieu de

Code : Tout sélectionner

replace(telephone, '', '')
il faut ecrire

Code : Tout sélectionner

replace(telephone, ' ', '')
:wink:

Posté : 05 févr. 2007, 19:33
par Truc
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)