|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 21 ![]() |
Bonsoir, j'ai un petit souci avec une requête sql, en faite j'ai deux tables
client_facturation et client_livraison. Dans chacune d'entre elles il y a les coordonnées des clients, mais pour client_livraison ce n'est pas obligatoire. En effet le client peut très bien recevoir sa commande chez lui ou faire un cadeau. Dans un second temps le client peut à tout moment modifier ses coordonnées de facturation et/ou de livraison. De plus toutes les coordonnées sont gardées dans la BDD pour avoir un historique. Donc il est possible de ce retrouver avec 5 adresses de facturation et 3 adresses de livraison pour un même client. Voici enfin ma question, comment faire pour avoir le dernier enregistrement de facturation et de livraison pour un client le tout en une seule requête? Structure des deux tables table client_facturation id_fact auto_increment ...données.... fk_id_membre id du client table client_livraison id_livr auto_increment ...données.... fk_id_membre id du client Code :
|
||
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 18 ![]() |
Tu ne donnes pas assez d'info, là tel quel tu ne peux pas avoir ce que tu veux.
Tu peux poster la structure des tes 2 tables ? |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 21 ![]() |
Voila les 2 tables
client_facturation(id_c_f ,civilite_c_f , nom_c_f ,prenom_c_f ,num_adr_c_f , nom_adr_c_f , cp_c_f , commune_c_f, id_pays, #fk_id_client) client_livraison(id_c_l ,civilite_c_l , nom_c_l , prenom_c_l, num_adr_c_l, nom_adr_c_l , cp_c_l, commune_c_l, id_pays, #fk_id_client) Sachant que c'est deux tables on chacune une clé étrangère "fk_id_client" qui porte sur la table client client(id_client, login_client, mdp_client, email_client) Contrainte d'intégrité référentielle -> fk_id_client fait référence à id_client de client |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 18 ![]() |
Je n'aurais pas adopté cette stucture, tu as des infos redondantes.
( En gros : Plutôt une table client principale, id client, raison sociale Une table avec n adresses possibles, dont une principale (par défaut) Quand le client passe commande ils choisi son adresse de livraison et c'est dans la table ou tu stocke les commandes que tu référence (avec clés étangères sur la table des adresse) l'adresse de livraison. Même logique pour la facturation) Sinon de ce que je vois tu ne peux stocker dans chaque tabes qu'une seule adresse par id client, donc au total tu ne peux avoir que 2 adresses possibles et non 5 non ? Dans ce cas tu prend soit l'adresse de client_livraison si elle est renseigné, sinon l'adresse de client_facturation. Je ne vois pas les champs qui s'auto incrémentent dans les définitions que tu m'as donné |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 18 ![]() |
Par rapport à ce que tu décris dans ton premier message, si les champs qui s'auto-incrémentent sont id_c_l et id_c_f j'aurais imaginé quelque chose comme ça :
Code :
|
||
|
|
10
|
|
|
#6 | ||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 21 ![]() |
Citation:
Citation:
Donc si un membre change d'adresse de facturation il peut le renouveler sur le site avec un INSERT INTO qui s'exécute derrière et non un UPDATE pour garder un trace pour l'historique. Donc l'id du membre peut se retrouver de 1 à N lignes d'enregistrement, et pareil pour l'adresse de livraison. D'ou la nécessiter de : ->Si il n'y a pas d'adresse de livraison cela veut dire que c'est la même que l'adresse de facturation donc une jointure normal pose problème si il n'y pas d'enregistrement dans client_livraison. ->Si le client à déjà enregistré N adresses dans client_livraison et client_facturation, il faut récupérer que la dernière adresse enregistrée en fonction du plus grand id auto-incrément avec l'id du client. je viens de voir ton message plus haut, je test tout de suite, merci. |
||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 21 ![]() |
Et bien merci je viens de tester la requête qui fonctionne.
j'ai juste mis le CASE entre parenthèse avec alias pour rajouter quelques champs. Encore merci pour les conseils et ton aide.
|
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 18 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com