Requete avec jointure sans doublons

Titine-60 -  
 Titine-60 -
Bonjour à tout ^^.
Je bute sur une requête qui pourtant ne m'a l'air pas si compliqué que cela...
J'ai trois tables avec comme id commun l'id client:
- 1 client : id, id_client
- 1 de remises : id, type_remise, montant_remise, #id_client
- 1 d'escomptes: id, type_escompte, montant_escompte, #id_client

Le problème est que si dans ma table il y a 2 remises pour le même client et 1 escompte du fait de ma requête la ligne escompte sera doublée.

Impossible de grouper l' escompte...

Mon collègue qui s'occupe du SQL étant en vacance si une âme charitable pouvait m'aider ça serai vraiment sympa

9 réponses

  1. flokocha Messages postés 1519 Statut Membre 281
     
    Sous quelle forme souhaites-tu obtenir le résultat ?

    Peux-tu fournir un exemple et le résultat que tu souhaites obtenir à partir de cet exemple ?
    0
  2. Titine-60
     
    Bonjour,

    Oui bien sur ^^

    J'ai ceci :

    LAVISSE - remise - 2014-02-15 - 4 €
    LAVISSE - remise - 2014-02-23 - 8 €
    LAVISSE - remise - 2014-02-28 - 7 €
    LAVISSE - escompte - 2014-01-15 - 15 €
    LAVISSE - escompte - 2014-01-15 - 15 €
    LAVISSE - escompte - 2014-01-15 - 15 €

    DUPONT - remise - 2014-02-02 - 2 €
    DUPONT - remise - 2014-02-14 - 5 €
    DUPONT - escompte - 2014-02-23 - 20 €
    DUPONT - escompte - 2014-02-23 - 20 €

    Je voudrais grouper les escomptes pour éviter qu'il me remette la ligne d'escompte à chaque fois qu'il y a une ligne de remise:

    LAVISSE - remise - 2014-02-15 - 4 €
    LAVISSE - remise - 2014-02-23 - 8 €
    LAVISSE - remise - 2014-02-28 - 8 €
    LAVISSE - escompte - 2014-01-15 - 15 €

    DUPONT - remise - 2014-02-02 - 2 €
    DUPONT - remise - 2014-02-14 - 5 €
    DUPONT - escompte - 2014-02-23 - 20 €
    0
  3. flokocha Messages postés 1519 Statut Membre 281
     
    Alors si j'ai bien compris, je te propose la requête suivante :

    select id_client, type, date, montant
    from client
    inner join (
    select id, 'remise' as type, date, montant from remises
    union
    select id, 'escompte' as type, date, montant from escomptes
    ) as data using(id)
    0
  4. Titine-60
     
    Merci pour ton aide mais ça ne fonctionne pas sniff.

    mais c'est ma faute je ne t'ai pas dit que c'était du PHP.

    De plus Je ne comprend pas le "AS DATA USING(id)" peux tu m'expliquer ?

    et je ne vois pas ou est fait le lien entre client.id et remise.id_client et escompte.id_client
    0
    1. flokocha Messages postés 1519 Statut Membre 281
       
      "Ça ne fonctionne pas" : c'est à dire ?

      Tu as dit que ton collègue qui s'occupe du SQL est en vacances, j'en ai conclu que tu avais besoin d'une requête SQL, non ? À toi de l'intégrer dans ton php :)

      "AS DATA USING(id)" : signifie que je crée une sous-requête que je nomme "data", que j'utilise dans une jointure avec la table "client" à partir de la colonne "id".

      "et je ne vois pas ou est fait le lien entre client.id et remise.id_client et escompte.id_client" : Ce lien se fait donc à partir de cette fameuse jointure. :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Titine-60
     
    Ma requête PDO me sort une erreur...

    Mais merci pour les explications en effet moi, à part les requête de base avec jointure simple... mais je n'aime pas recopier bêtement d'où mes questions ^^...

    Je regarde ça demain au boulot et je tiens au jus et merci
    0
  7. JooS Messages postés 2705 Statut Membre 228
     
    Salut,

    Dans la structure de table que tu as cité, tu ne mentionnes à aucun moment la présence de la colonne "date", alors que dans les exemple la date existe ?!

    Peux tu réecrire la structure des tables sous ce format :
    Nom de la Table (id, colonne_1, colonne_2, ..., #colonne_i)
    0
  8. Titine-60
     
    Salut,

    Oui je n'ai pas mis les vrais tables car j'aimerai comprendre et éviter de "pomper" vulgairement. (flokocha désolé si je t'ai fait bosser pour rien mais ta requête sera similaire a ce que je veux faire).

    Les vrais tables se nomment : vendeurs, remises et escomptes

    dans vendeurs : je n'ai besoin que du numéro de région du vendeur et surtout je ne peux pas la modifier

    vendeurs (id,matricule_vendeur, region_vendeur)

    remise(id, #matricule_vendeur, date, type, px_reel, px_vendu)

    escompte(id, #matricule_vendeur, date, type, montant)

    Encore merci pour votre aide
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      Ok, c'est très différent de la première structure !
      Et est ce que les remises et escomptes ne dépendent pas d'un produit ?

      Quelle est l'information que tu recherches a extraire ? les remises et les escomptes de chaque client ?
      0
  9. Titine-60
     
    Non pas du tout je veux juste afficher les résultats comme ceci :

    région - matricule - remise - 2014-02-02 - px_vendu - px_réel
    région - matricule - remise - 2014-02-14 - px_vendu - px_réel
    région - matricule - escompte - 2014-02-23 - montant

    Trier par matricule vendeur et date

    Bien sur il peut y avoir 2 escomptes par jour pour le même vendeur mais le soucis c'est que si j'ai 3 remises dans le mois pour les même vendeurs j'aurais tout les escomptes triplés...
    0