Besoin d'aide jointures complexes !

Eléphant du PHP | 152 Messages

21 avr. 2007, 17:09

Salut à tous

Voila j'essai une requete comportant des jointures sur 4 tables en
utilisant LEFT OUTER JOIN pour avoir les enregistrements NULL

La table situé complètement à gauche n'a aucun champ en commun
avec la 3ème table.
Idem pour la 2ème et 4 ème table.

Table 1 : CLIENTS
Table 2 : COMMANDES
Table 3 : FACTURES
Table 4 : LIGNES_FACTURES

En gros je souhaiterais voir toutes les commandes d'un client, toute
les factures attachées à chaque commande et toutes les lignes de
factures attachées à chaque facture.

Voici ma requête :

Code : Tout sélectionner

select * from clients LEFT OUTER JOIN commandes ON (clients.NOCLIENT = commandes.NOCLIENT) LEFT OUTER JOIN factures ON (commandes.NOETUDE = factures.NOETUDE) LEFT OUTER JOIN lignes_factures ON (lignes_factures.NOFACT = factures.NOFACT) WHERE clients.NOM='DUPONT'
Les deux problèmes que je rencontre sont :

-Impossible de classer un champ d'une table qui n'a pas de jointure
directe avec la table client.

- Impossible d'afficher le champ NOFACT appartenant à la table FACTURES ou à la table LIGNES_FACTURES


Bizarre Bizarre.

A part ces deux point, ma requête marche mais je souhaiterais vraiment
pouvoir récuperer tout mes champs et les classer.

Merci d'avance !

:wink:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

21 avr. 2007, 17:36

Je n'ai encore lu le sujet en profondeur, mais ce que tu peux faire pour aider ta cause c'est donner le schéma des tables en question et indiquer le SGBD que tu utilises sans oublier la version.

J'essaierai de repasser un peu plus tard si personne n'a répondu entre temps ;)

Eléphant du PHP | 152 Messages

22 avr. 2007, 22:46

j'utilise mysql 4.2

Ma table CLIENTS contient les champs suivants :
ID
NOCLIENT (jointure sur ce champ)
NOM
COMMENTAIRES

Ma table COMMANDES contient les champs suivants :
NOETUDE (jointure sur ce champ)
NOCLIENT (jointure sur ce champ)
REF
SUJET

Ma table FACTURES contient les champs suivants :
ID
NOFACT (jointure sur ce champ)
NOETUDE (jointure sur ce champ)
DATE_FACT
HT
TVA
TTC
ENTITE
ADRESSE1
ADRESSE2
CP
VILLE
DATE_ENV
DATE_PAI

Ma table LIGNES_FACTURES contient les champs suivants :ID
NOFACT (jointure sur ce champ)
NOLIGNE
QTE
LIBELLE
PRIX_UNITAIRE
DATE
TVA

Si vous pouviez m'aider ce serait génial ! Merci ! :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 avr. 2007, 11:43

Et si au lieu du SELECT *, tu spécifiais le nom des champs que tu souhaites récupérer (quitte à les mettre tous, si tu les veux vraiment tous).

Cela t'obligerais à spécifier dans quelles tables tu souhaites récupérer un champ lorsque celui-ci a le même nom dans plusieurs, et cela éviterait à mysql des migraines carabinées à se demander comment gérer les champs dont le nom est ambigue :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 152 Messages

23 avr. 2007, 15:09

Je vais tester !!

Je vous tiens au courant si ça marche

Eléphant du PHP | 152 Messages

23 avr. 2007, 15:30

Merci ça marche !!

J'avais déjà essayer mais je m'étais trompé de table.

Votre remarque m'a permis de revenir dessus et de me rendre
compte de mon erreur.

Merci beaucoup ! :D


Je vous posterais un autre message plus subtile tout à l'heure
sur les jointures.
Celui qui pourra me répondre est forcément un bosse du SQL

A toute allure !!