Bonjour,
Je vais te présenter une solution. Voici la situation de départ.
Tu disposes d'une table
Personnages (avec des champs
id,
nom et
monnaie), d'une table
Objets (avec des champs
id et
nom) et d'une table
Vendeurs (avec des champs
id et
nom).
Tu disposes également de deux table de relation
Objets_Personnages (avec des champs
objet_id et
personnage_id) et
Objets_Vendeurs (avec des champs
objet_id,
vendeur_id,
quantite et
prix).
Pour afficher la marchandise d'un vendeur (dont tu connais l'ID, symbolisé par %d1 dans la requête), une simple requête suffit :
Code :
SELECT O.id,
O.nom,
OV.quantite,
OV.prix,
V.nom
FROM Vendeurs V
LEFT
JOIN Objets_Vendeurs OV
ON OV.vendeur_id = V.id
AND OV.quantite > 0
LEFT
JOIN Objets O
ON O.id = OV.objet_id
WHERE V.id = %d1;
Quand le joueur se rend sur cette page, il peut désigner un objet à acheter (l'objet est identifié par son ID). Note que ce système permet aux marchands de proposer les mêmes objets à des prix différents.
Il faut maintenant savoir si le personnage est assez riche (l'argent du joueur est représenté par %d1 dans la requête) pour s'offrir l'objet qu'il a demandé (dont l'ID est représenté par %d2 dans la requête) au prix demandé par le vendeur (dont l'ID est représenté par %d3 dans la requête).
Code :
SELECT COUNT(*) AS objet_correspondant
FROM Objets O
JOIN Objets_Vendeurs OV
ON OV.objet_id = O.id
AND OV.vendeur_id = %d3
AND OV.prix <= %d1
WHERE O.id = %d2
Si le
champ objet_correspondant vaut 0, c'est que le joueur n'a pas assez d'argent (ou que le vendeur ou l'objet indiqué n'existe pas). S'il vaut 1, c'est que le joueur à assez d'argent.
Ensuite, le reste est très simple, il suffit de mettre à jour la somme d'argent du personnage, d'insérer une entrée dans la table
Objets_Personnages et de mettre à jour une entrée dans
Objets_Vendeurs.
Pour mettre à jour la somme d'argent du joueur (dont l'ID est représenté par %d1 dans la requête), on déduit de sa somme d'argent le prix (représenté par %d2 dans la requête) de l'objet.
Code :
UPDATE Personnages
SET monnaie = monnaie - %d2
WHERE id = %d1;
Pour donner l'objet (dont l'ID est représenté par %d1 dans la requête) au personnage (dont l'ID est représenté par %d2 dans la requête), voici la marche à suivre :
Code :
INSERT
INTO Objets_Personnage (objet_id, personnage_id)
VALUES (%d1, %d2);
Pour mettre à jour le stock de l'objet (dont l'ID est représenté par %d1 dans la requête) du vendeur (dont l'ID est représenté par %d2 dans la requête) :
Code :
UPDATE Objets_Vendeurs
SET quantite = (quantite - 1)
WHERE objet_id = %d1
AND vendeur_id = %d2;
Voilà, j'espère que ça pourra t'aider. Si tu as des questions, n'hésite pas.
Je précise qu'il y a moyen de simplifier le code, surtout si tu ne gères pas les stocks de tes marchands.
Sephi-Chan