Requête MySQL pour expert

WRInaute passionné
Bonjour,

Voila ma requête

Code:
$query="SELECT magasins.magasin, magasins.categorie, magasins.adresse, magasins.tel, magasins.commentaire, soldes.date_debut, soldes.date_fin  
FROM soldes, magasins, villes 
WHERE soldes.magasin_id=magasins.compteur AND magasins.ville=villes.ville AND magasins.cp=villes.cp AND villes.dep=\"$ville[5]\" AND (TO_DAYS(soldes.date_fin) - TO_DAYS(NOW()) >= 0) 
ORDER BY soldes.date_debut ASC";


Mais, je voudrais que pour "magasins.cp=villes.cp" la comparaison ne se fasse que sur les DEUX permiers caractères (ce sont des codes postaux)
:)

Avez vous une idée sur comment faire ça ?

Merci beaucoup
 
WRInaute passionné
Dans la première partie de ton SELECT faudrait déjà que tu SELECT les 2 premiers caractères (je ne me rappelle plus de cette fonction).

Sinon, tu peux frauder, créer un champ "ville_a_deux_lettre" et juste avant cette requête (si ville change souvent)
UPDATE ville_a_deux_chiffre SET la_fonction_pour2_lettre WHERE ville_a_deux_chiffre = '';

C'est un peu à l'arrache, je trouve ça très lourd.
 
WRInaute passionné
Merci
Bon si quelqu'un a mieux, je sais que ça doit être possible, mais je ne trouve pas comment

En plus il s'agit de comparer les deux premiers caractère des champs cp des tables magasins et villes

Merci
 
WRInaute passionné
Code:
SELECT magasins.magasin, magasins.categorie, magasins.adresse, magasins.tel, magasins.commentaire, soldes.date_debut, soldes.date_fin 
FROM soldes, magasins
WHERE soldes.magasin_id = magasins.compteur 
AND magasins.ville = villes.ville 
AND magasins.cp = villes.cp 
AND villes.dep=  LEFT(magasins.cp, 2)
AND (TO_DAYS(soldes.date_fin) - TO_DAYS(NOW()) >= 0)
ORDER BY soldes.date_debut ASC;

Pas sûr de bien avoir compris ta question sans avoir trop la structure, mais avec ça ça "devrait" fonctionner (à vérifier, je ne suis pas du tout sûr de tes champs).
 
WRInaute passionné
ok merci, j'essaye ca demain :)

Mais pour
villes.dep= LEFT(magasins.cp, 2)

villes.dep et un code postal, par exemple 75013
magasins.cp est aussi un code postal, par exemple 75017

Donc je veux testes si les deux premiers caractère de villes.dep, soit 75 sont les mêmes que les 2 premiers caractères que magasins.cp, soit 75

Merci
 
WRInaute passionné
Dans ce cas c'est dans le même style :
LEFT(villes.dep, 2) = LEFT(magasins.cp,2)

A vérifier, je suis un peu confus car dep = département :p
Enfin bon, tu pourrais choisir de stocker en plus le numéro de département, ça te ferait gagner pas mal de ressources.
 
WRInaute accro
et une petite précision qui a son importance. Les deux premiers chiffres d'un code postal peuvent ne pas être le n° du dpt. Y'a peu de villes en France concernées mais ca existe... à moins que je confonde avec le code INSEE
 
Discussions similaires
Haut