[SQL] 'Like' trop large!

Résolu/Fermé
Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 - 26 mai 2008 à 10:48
Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 - 26 mai 2008 à 13:45
Bonjour,

comment pourrais restreindre les recherches effectuer par ma requete :
"select id_matiere from $nomtable where ids_eleves like '%$id%' And (Date>='$du' and Date<='$au') ";


Dans la base, j'ai, dans le champs ids_eleves, des information du genre "069.005.104", qui représente une série d'identifiant.
Cependant, lorsque je recherche les matière suivies par l'étudiant '9', je récupère aussi ceux de tous les autres étudiants ayant un '9' dans le id.

Il faudrait donc dire au "Like", qu'avant l'id recherché, il ne peut y avoir que '.00', '.0' ou '.' (précédé d'autre id) et après, il ne peut y avoir que '.' (suivie d'autre id).

Y a-t-il un moyen de faire cela simplement?
Merci d'avance!!

2 réponses

Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
26 mai 2008 à 12:09
bonjour :)

tu as essayé ceci :

"select id_matiere from $nomtable where ids_eleves like '$id' And (Date>='$du' and Date<='$au') ";


Juste enlever les % autour de id car ça lui dit tout ce qu'il y a devant id et tout ce qu'il y a après
0
Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 8
26 mai 2008 à 13:11
Je veux bien mais... si je lui demande LIKE '$id'.
Si mon id est 13 et que dans ma liste j'ai 056.013.096, il ne me renvois pas le tuple !

Ca ne marche pas en gros...
0
Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 8
26 mai 2008 à 13:14
J'ai résolu partiellement le probleme :
"select Distinct id_matiere from $nomtable 
							where 
							(
							ids_eleves like '00$id.%' 
							or ids_eleves like '0$id.%' 
							or ids_eleves like '$id.%' 
							or ids_eleves like '%.00$id' 
							or ids_eleves like '%.0$id' 
							or ids_eleves like '%.$id' 
							or ids_eleves like '%.$id.%' 
							or ids_eleves like '%.0$id.%' 
							or ids_eleves like '%.00$id.%' 
							or ids_eleves like '$id' 
							or ids_eleves like '0$id' 
							or ids_eleves like '00$id' 
							)
							And (Date>='$du' and Date<='$au') ";


Mais c'est on ne peux plus modulable et compréhensible :\
Enfin bon.. ca marche -_-

Je ne met pas 'Résolu', au cas ou vous auriez une meilleur solution a me proposer.
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
26 mai 2008 à 13:26
Bonjour.

Ton "ids_eleves", il a un format défini ?
Genre, c'est une suite d'ID sur trois caractères séparés par des points ?
Dans l'affirmative, c'est relativement simple : tu prends $id, tu le complète avec des "0" devant pour arriver à trois caractères et tu fais un like '%$id_complete%'
0
Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 8 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
26 mai 2008 à 13:45
Réponse très simple en effet!
Je n'y avais meme pas pensé -_-

Merci a toi! Problème résolu :D
0