oracle9i : données hétérogènes dans une whereclause

oracle9i : données hétérogènes dans une whereclause - SQL/NoSQL - Programmation

Marsh Posté le 24-11-2005 à 17:42:04    

Hello,
je me retrouve en face d'un pb technique, simple à comprendre.
 
En gros, je voudrais faire un :  
"select NOM,PRENOM from USERS where NOM=..."
 
Cette requête sera lancé à une page Web en PHP, et les valeurs saisies peuvent être de plusieurs type :
  - un nom simple : exemple : 'DUPONT'
  - une liste de nom : exemple : 'DUPONT','DURAND'
  - une liste non précise : exemple 'DU%'
 
Sachant que tout peut être mélangé, l'utilisateur devra pouvoir mettre en entrée : 'MAURICE','DU%','ROBERT'
 
J'ai beau réfléchir, je trouve pas de solution simple, à moins de détecter le %, et je génére une sous-requête en dynamique ...
 
Help !  :heink:  

Reply

Marsh Posté le 24-11-2005 à 17:42:04   

Reply

Marsh Posté le 24-11-2005 à 17:48:13    

tu remplaces le '=' par un 'like', et un tu ajoutes un 'or like' par mot? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-11-2005 à 17:54:21    

mouiiii, mais bon.
J'ai potentiellement plusieurs centaines de valeurs en entrée, et plusieurs where clause différent (NOM like 'pouet' and PRENOM like 'prout'). L'itération en dynamique dans PHP serait à mon avis super difficile à gérer

Reply

Marsh Posté le 24-11-2005 à 17:58:01    

Bah explique mieux le contexte du problème, et l'origine des valeurs saisie, alors...
Tous les noms et tous les prénoms (et ainsi de suite) entrés peuvent être combinés?
Si non, comment tu les associes?
Si oui, quel est le problème?[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-11-2005 à 18:13:35    

Il y a au max 2 clauses renseignés par l'utilisateur + pas mal de fixes. Si il y a 2 clauses à renseigner, il n'y a que la première qui a un %, l'autre valeur peut se traduire en in(...)
 
Exemple :  
"select NOM,PRENOM from USERS where NOM=... and PRENOM=... and date>sysdate and machine=truc and service=bidule;"
 
Donc, je pourrais écrire ma requête en :  
"select NOM,PRENOM from USERS where (NOM like ...  or NOM like .... or NOM like ...) and (PRENOM in ('Roberto')) and date>sysdate and machine=truc and service=bidule;"
 
Potentiellement, il peut y avoir une liste de qq centaines (>500) de NOM ...
 

Reply

Marsh Posté le 24-11-2005 à 18:21:17    

Si tu peux avoir plusieurs centaines de noms, ils serait effectivement intéressant d'un point de vue performance de détecter les nom comportant des caractères jocker pour les traiter séparément des autres (que tu traiterait dans un IN). Mais Si ta base est d'un taille raisonnable et/ou que les perfs coté BD ne sont pas un problème, opte pour la solution du 'or NOM like' tu te feras moins chier à le coder et le pré traitement avant de lancer la requête sera plus rapide


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 28-11-2005 à 13:23:40    

En pratique, personne ne va entrer à la main 500 noms à rechercher ... ou alors il y a des fous du clavier :D

Reply

Marsh Posté le 28-11-2005 à 20:15:56    

Beegee a écrit :

En pratique, personne ne va entrer à la main 500 noms à rechercher ... ou alors il y a des fous du clavier :D


Qui te dis que les noms sont saisis au clavier ? si ça se trouve l'utilisateur les sélectionne dans une liste de 2000 salarié avec des critères qui lui sont propres et qu'on ne peut pas traduire sous forme de requête ;)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed