23-09-2007, 06:05 PM
Bonjour,
tout d'abord, je pense que tu devrais avoir une table de référence pour les catégories puisque plusieurs objets peuvent appartenir à la même catégorie. Mais c'est juste une question de normalisation de ton modèle de données (Cf. MERISE).
Pour ta table inventaire, tu peux, avant d'exécuter l'équipement, faire une requête du type:
Cette requête va compter les objets équipés (clause where i.port=1) de l'utilisateur $pseudo (i.pseudo=$pseudo) qui sont de la même catégorie que l'objet que le joueur tente d'équiper (i.id_item = o.id_item est la jointure entre inventaire et item et i.categorie = $categorie cherche les objets de cette catégorie).
Si le résultat ne vaut pas 0 ou null, c'est qu'un objet de cette catégorie est déjà équipé.
Si le volume de donnée est un peu élevé, tu peux dénormaliser inventaire en y ajoutant une colonne categorie et en dupliquant l'information.
Ainsi ta requête évite la jointure :
tout d'abord, je pense que tu devrais avoir une table de référence pour les catégories puisque plusieurs objets peuvent appartenir à la même catégorie. Mais c'est juste une question de normalisation de ton modèle de données (Cf. MERISE).
Pour ta table inventaire, tu peux, avant d'exécuter l'équipement, faire une requête du type:
Code :
SELECT count(i.id_item) from inventaire i, item o where i.pseudo_id = $pseudo AND i.port = 1 AND i.id_item = o.id_item AND i.categorie = $categorie
Si le résultat ne vaut pas 0 ou null, c'est qu'un objet de cette catégorie est déjà équipé.
Si le volume de donnée est un peu élevé, tu peux dénormaliser inventaire en y ajoutant une colonne categorie et en dupliquant l'information.
Ainsi ta requête évite la jointure :
Code :
SELECT count(id_item) from item where i.pseudo_id = $pseudo AND i.port = 1 AND i.categorie = $categorie