-
LIKE avec Regexp
Bonjour,
Je cherche à faire une requête SELECT dans une table avec un champ mediumtext dans lequel se trouve de nombreuses villes et codes postaux. L'idée est de récupérer un code postal dans un formulaire, et de tester les entrées dont le champ mediumtext comporte au moins un code postal ayant les deux premiers chiffres identiques (code postal du même département).
Je ne suis pas un cador en sql donc si quelqu'un peut m'expliquer gentiment comment faire...
Au départ j'ai écrit SELECT title, zone, email FROM table_content WHERE zone LIKE '%35400%'
Cela fonctionne, mais j'aimerai que ça marche même si le contenu du champ n'a que "35000". Donc j'ai l'idée d'utiliser une expression régulière, mais là je sèche...
Merci à ceux qui auront le temps de se poser sur ma question.
-
N'est-ce pas un truc du genre ?
-
j'ai trouvé
Bonjour vermine et merci de ton aide
non la proposition WHERE zone LIKE '%35???%' ne fonctionne pas. Mais en testant plusieurs trucs, je suis tombé sur la solution, que j'explique ici si jamais d'autres cherchent :
tout d'abord, en récupérant le code postal par formulaire, je garde seulement les 2 premiers chiffres : $departement = substr($codepostal,0,2);
ensuite, la requête permettant de trouver si des codes postaux faisant partie du même département sont présents dans une chaine :
SELECT * FROM table_content WHERE zone REGEXP '(".$departement."[0-9]{3})'
(donc si on cherche les codes postaux dans le département d'ille et vilaine, cela donnera SELECT * FROM table_content WHERE zone REGEXP '(35[0-9]{3})'
-
Han d'accord.
Par contre je me demande si ma version n'était pas plutôt :
Bref, tant que vous ayez ce que vous désirez, c'est le principal. ;)
-
Ah effectivement, avec '%35___%', ça fonctionne j'ai un résultat. Mais par contre, j'ai même trop de résultats, parceque ça ne se limite pas aux 2 premiers chiffres du département : par exemple, ça prend 59350, 51350, etc...
Mais merci pour l'info, ça me servira un de ces 4
-
Bonjour,
D'après ce que tu expliques, le masque de recherche doit être "35___", et non "%35___%", sinon tu cherches tout ce qui contient 35 suivant de 3 caractères, suivent d'un nombre quelconque de caractères.
Tatayo.