Forum Clubic

Mysql jointure entre 1er table et 2e et 2e avec la 3e

Bonjour,

J’aimerais créer un tableau avec quelques tables de mon mysql, le problème est que je dois créer une jointure entre ma 1er table et la 2e (pour ca ca fonctionne), mais ensuite une jointure de ma 2e table avec ma 3e, la je bloque, voici le schéma de ma bd:

[Photo supprimée]

Je dois prendre la table in_items la joindre avec la table in_items_quantites, la table in_items_um et la table in_items_min_max mais ensuite prendre la table in_items_min_max et la joindre avec la table in_items_um.

Actuellement je suis capable de sortir mon information sur 2 tableaux différents, mais j’aimerais les avoir dans le même. Voici mes requetes:

SELECT
in_items.id,
in_localisations.description AS Localisation,
in_items_quantites.physique / in_items_um.facteur AS QtePhysique,
in_items_quantites.disponible / in_items_um.facteur AS QteDisponible,
in_items_quantites.achat / in_items_um.facteur AS achat,
in_items_quantites.transest_in AS TransfertIn,
in_items_um.description,
in_items_um.facteur
FROM in_items
LEFT JOIN in_items_quantites ON in_items.id= in_items_quantites.in_items_id
LEFT JOIN in_localisations ON in_items_quantites.in_localisations_id = in_localisations.id
LEFT JOIN in_items_um ON in_items.id = in_items_um.in_items_id

SELECT
IN_ITEMS_MIN_MAX.in_items_id,
in_localisations.description AS Localisation,
minstock * in_items_um.facteur AS MIN,
maxstock*in_items_um.facteur AS MAX,
in_items_um.facteur
FROM IN_ITEMS_MIN_MAX
LEFT JOIN in_items_um
ON IN_ITEMS_MIN_MAX.in_items_um_id = in_items_um.id
LEFT JOIN in_localisations
ON
IN_ITEMS_MIN_MAX.in_localisations_id = in_localisations.id

Il faut absolument que je parte de ma table in_items afin de pouvoir obtenir toutes mes données, la table IN_ITEMS_MIN_MAX ne contient pas des informations pour la table in_items_quantites.

Merci de votre aide

Salut,

Une description de chaque table pourrait être utile, qu’on puisse déduire si c’est un problème de requête SQL ou un problème dans la structure de tes tables.

Voici une version différente pour la visualisation:

[Photo supprimée]

La première table est la table des produits: donc id du produit, description, …

La 2e table est la table des quantités en inventaire: donc id du produit, localisation du produit, quantité en inventaire, quantité disponible, quantité en achat, quantité en transfert

La 3e table est pour les min/max: id du produit, localisation du produit, stock minimum à tenir en inventaire, stock maximum à tenir en inventaire, id de l’unité de mesure, facteur de conversion

La 4e table est les unités de mesure: id de l’unité de mesure, description de l’unité de mesure, facteur de conversion, id du produit, prix

La 5e table est la localisation: id de la localisation, nom de la localisation

Merci

Ta 2ème et ta 3ème table pourraient être regroupées en une seule ? Tu utilises des left join, mais as-tu réellement des liens “facultatifs” ?

Sans tenir compte de ma 1ère remarque et en considérant tous tes liens garantis, tu peux parcourir toutes les tables ainsi:

SELECT 
in_items.id,
in_localisations.description AS Localisation,
in_items_quantites.physique / in_items_um.facteur AS QtePhysique,
in_items_quantites.disponible / in_items_um.facteur AS QteDisponible,
in_items_quantites.achat / in_items_um.facteur AS achat,
in_items_quantites.transest_in AS TransfertIn,
in_items_um.description,
in_items_um.facteur,
IN_ITEMS_MIN_MAX.in_items_id,
loc2.description AS Localisation2,
minstock * in_items_um.facteur AS MIN,
maxstock*in_items_um.facteur AS MAX,
in_items_um.facteur

FROM in_items, in_items_quantites, in_localisations, IN_ITEMS_MIN_MAX, n_items_um, in_localisations loc2

WHERE in_items.id = in_items_quantites.in_items_id
AND in_items_quantites.in_localisations_id = in_localisations.id 
AND IN_ITEMS_MIN_MAX.in_items_id = in_items.id
AND IN_ITEMS_MIN_MAX.in_items_um_id = in_items_um.id
AND IN_ITEMS_MIN_MAX.in_localisations_id = loc2.id

ya 2 jointures vers in_localisations, mais si tu tiens compte de ma 1ère remarque, il n’y en aura qu’une seule.

Merci pour le commentaire j’essaie le tout et te tiens au courant.

En fait je ne peux pas toucher au table car ce n’est pas moi qui les a créé et je ne peux les changer.

Donc j’essaie ta solution et regarde si j’obtiens ce que je veux.

Merci encore et je te donne des nouvelles dans peu de temps

Intéressant, mais j’ai absolument besoin des liens facultatifs, c’est à dire que je dois absolument obtenir les résultat de la table in_items_quantites même si je n’ai rien dans la table IN_ITEMS_MIN_MAX correspondant et vice versa.

Voici un exemple de ce que j’ai besoin d’avoir:

id sku localisation physique disponible min max
1 sku1 ville1 10 10 5 20
2 sku1 ville2 5 5 NULL NULL
3 sku1 ville3 7 7 5 20
4 sku1 ville4 NULL NULL 7 15

Merci de votre aide c’est très apprécié

Alors on obtient:


SELECT 
in_items.id,
in_localisations.description AS Localisation,
in_items_quantites.physique / in_items_um.facteur AS QtePhysique,
in_items_quantites.disponible / in_items_um.facteur AS QteDisponible,
in_items_quantites.achat / in_items_um.facteur AS achat,
in_items_quantites.transest_in AS TransfertIn,
in_items_um.description,
in_items_um.facteur,
IN_ITEMS_MIN_MAX.in_items_id,
loc2.description AS Localisation2,
minstock * in_items_um.facteur AS MIN,
maxstock*in_items_um.facteur AS MAX,
in_items_um.facteur

FROM in_items_quantites, in_localisations, in_items
LEFT JOIN IN_ITEMS_MIN_MAX ON IN_ITEMS_MIN_MAX.in_items_id = in_items.id
LEFT JOIN n_items_um ON IN_ITEMS_MIN_MAX.in_items_um_id = in_items_um.id
LEFT JOIN in_localisations loc2 ON IN_ITEMS_MIN_MAX.in_localisations_id = loc2.id

WHERE in_items.id = in_items_quantites.in_items_id
AND in_items_quantites.in_localisations_id = in_localisations.id