Prix d'un objet influencé par d'autres sous objet

WRInaute impliqué
Désolé pour le titre, qui n'est pas forcément clair, mais ma requête est relativement difficile à expliquer.

J'ai une base de donnée ( pas moi qui l'ait créé ainsi ) qui contient deux tables.

Une première table, contient des infos sur les items, et surtout, son prix.
On va dire id,price.

Sauf que c'est pas le prix final, mais simplement le coût supplémentaire nécessaire pour obtenir cet objet. En clair en image:
1348063404-objet-sql.jpg


L'objet A dispose d'un id. Par exemple 315.
Dans une autre base de donnée, je sais que ce même objet A est composé d'autre objet, de la catégorie B qui eux même sont composés d'objets C.
Je le sais car l'autre base de donnée me l'indique.
Cela donne un truc du genre

SELECT buildsToItemId,recipeItemId FROM `itemrecipes` WHERE recipeItemId='$id'

Je souhaite trouver le prix final de l'item A. Il faut donc que j'additionne ses items B liés à lui, et les items C liés à B.


Je suis parti sur un truc du genre :
Je cherche donc le prix final.


Vous avez une idée de comment y procéder ?
La table contient relativement peu de lignes, dans les 1K, ça serait pour une requête à faire "une fois" ( j'enregistre les prix et puis c'est bon ).
Merci pour votre lecture
 
WRInaute accro
? très zarbi, pas moyen de passer plutôt par du PHP pour ressortir ces prix finaux et les enregistrer ? Ca te serait peut etre plus commode.
 
WRInaute impliqué
Ah si bien sur, c'est l'objectif d'ailleurs.
Ce n'est pas ma BDD je ne l'ai pas créé, ( ça rend fou un truc pareil ).
Moi mon obj est de prendre cette BDD, et d'en ressortir une petite variable en array disons. Après au pire je pourrais MAJ la base de donnée.

Cela me rend fou, plusieurs jours que j'y suis.
 
WRInaute impliqué
Ah si bien sur, c'est l'objectif d'ailleurs.
Ce n'est pas ma BDD je ne l'ai pas créé, ( ça rend fou un truc pareil ).
Moi mon obj est de prendre cette BDD, et d'en ressortir une petite variable en array disons. Après au pire je pourrais MAJ la base de donnée.

Cela me rend fou, plusieurs jours que j'y suis.
 
WRInaute impliqué
Salut, la structure était donnée.
Les keys intéressantes :
Base A : ID, price
Base B : buildsToItemId,recipeItemId FROM `itemrecipes`
 
WRInaute accro
donc si je comprend bien la table B est de la forme (ID_Constituant, ID_Objet)

ID_Constituant étant l'id de l'objet qui entre en relation dans la constitution d'un objet.
et ID_Objet étant la clé étrangère d'un objet (qui lui même peut être composé de sous objets)

il n'y a que deux niveaux d'imbrication (B et C) ? quel est l'ID_Constituant des objets dans le niveau C ? 0 ?
 
WRInaute accro
Je n'ai pas tout compris... Les données sont dans des tables différentes ou carrément des bases différentes?

Si tout est dans la même base, quelque chose comme:

Code:
UPDATE table_produits_complets a SET prix = sum(prix) FROM table_sous_produits_niveau_1 b JOIN table_sous_produits_niveau_2 c ON b.id=c.id_b WHERE b.id_a = a.id

devrait faire l'affaire (à tester avant évidemment). Ca ne fonctionne correctement que si les produits existent déjà tous dans la table des produits complets (i.e. il n'y a pas de nouveaux produits) et qu'aucun produit n'est supprimé. Si tu veux gérer ces cas de figure, c'est un peu plus compliqué.

Si tu as deux bases différentes, tu vas être obligé de passer "par l'extérieur" (php, un dump SQL...). Là encore le détail dépend de la correspondance entre les deux côtés (nouveau produits, produits supprimés, etc.).

Jacques.
 
Discussions similaires
Haut