recherche complexe

jup
Invité n'ayant pas de compte PHPfrance

31 oct. 2006, 14:30

Bonjour,

j'ai un probleme de recherche sur des numéros de téléphones
ex: l'utilisateur tappe 025321400
la requete ne retourne rien pourtant comme dans ma base j'ai
02 532 14 00 ou 02/532.14.00 j'aimerais bien qu'il me trouve une correspondance, mais je ne sais pas quel mode de recherche et quelle fonction il faut appliquer au champ?

Peut-être une expression régulière ?

D'avance merci

PS : je sais que c'est possible a faire en 2 requetes
1/ select tous les numeros suivi d'une boucle les analyser avec un str_replace en sauvant l'identifiant
2/ faire un select sur les identifiants trouvés

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

31 oct. 2006, 14:34

Et si, prévetivement, tu nettoyais ta base de tous les signes inutiles : slashs, points, espaces,...
En n'y enregistrant ensuite que les chiffres, tu n'aurais plus aucun problème de recherche. ;)

jup
Invité n'ayant pas de compte PHPfrance

31 oct. 2006, 14:45

bonjour,

question présentation de l'affichage je ne peut pas me le permettre.

Si l'utilisateur veut un + des . des / ou des espaces, grouper par 3 ou par 2 faire un préfixe de 2 ou de 3,4 chiffres mettre un (0) je dois le laisser faire.

Je pourais eventuellement faire une copie du champ sans les caractères mais il y a redondance et danger de non synchronisation et je préfère éviter cette solution

ViPHP
ViPHP | 3607 Messages

31 oct. 2006, 17:33

je pense que si l'utilisateur veux des . des / et tout ça... c'est en php que tu dois le faire, ça te permet ainsi de faire une recherche plus simple et ça reste évolutif... et oui si l'utilisateur décide de ne plus mettre des / mes des #, tu ne vas tout de même pas changer tout les champs de ta base... :wink:

Invité
Invité n'ayant pas de compte PHPfrance

02 nov. 2006, 13:43

justement je laisse la liberté d'encodage
je cherche une fonction SQL qui permet d'épurer ces caractères lors d'une recherche

ViPHP
ViPHP | 2144 Messages

02 nov. 2006, 14:38

Pas sûr que cela soit faisable en sql.

Je me joins aux autres pour penser qu'il vaut mieux avoir le plus de structure possible et ne pas laisser l'utilisateur encoder les numéro comme il veut, ne serait ce que pour des raisons d'esthétisme, et puis on ne sait jamais ce que deviendront ces données, peut-être devra tu un jour les exporter par exemple vers un logiciel de gestion de contact, et là ce sera mission galère.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

02 nov. 2006, 14:42

Merci, iclo.
Comme je te le suggérais, il est préférable de filtrer le format de ces numéros.
Libre à l'utilisateur de saisir des - des . et des /, c'est à toi de purger les numéros de ces signes
pour n'enregistrer que des chiffres dans ta base.

ViPHP
ViPHP | 1961 Messages

02 nov. 2006, 14:45

Bonjour,

Pour ce qui est de conservation des données, je rejoins les autres (de façon uniforme) mais si tu tiens vraiment à offrir la possibilite de personnaliser l'affichage, mantiens une colonne qui te servira de masque d'affichage (par numéro)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 3607 Messages

02 nov. 2006, 14:52

ou puisque le client est roi, dans ça config, il saisie la façon dont il veut voir les numéros, et ensuite à toi de les mettre en forme via des expressions régulières ou autres... :wink:

Invité
Invité n'ayant pas de compte PHPfrance

02 nov. 2006, 20:13

Salut,

Si tu veux utiliser SQL :
http://dev.mysql.com/doc/refman/4.1/en/regexp.html

La norme d'affichage des numéros de téléphone en France c'est : (0)0 00 00 00 00, le premier 0 entre parenthèses car il est optionnel. Il y a aussi le code régional +33 mais c'est une propriété de la zone géographique et non du téléphone.

Je pense aussi qu'idéalement, un numéro de téléphone doit être enregistré sans son format mais les choses deviennent difficiles dans l'internationalisation. Les normes diffèrent d'un pays à l'autre, certains pays n'ont pas de normes, d'autres en ont plusieurs (Allemagne par exemple).

A+