19-03-2007, 03:49 PM
Bonjour tout le monde.
Je suis en train de me prendre la tête depuis plusieurs jours et je n'arrive pas à trouver une solution satisfaisante.
Un joueur peut fabriquer et faire évoluer des machines.
Une machine est décomposée en 6 pièces qui sont évoluables jusqu'à un certain niveau.
Nous avons donc:
MACHINE 1
Pièce 1 => Niveau origine = 1 ; Niveau max = 3
Pièce 2 => Niveau origine = 1 ; Niveau max = 5
Pièce 3 => Niveau origine = 3 ; Niveau max = 4
Pièce 4 => Niveau origine = 1 ; Niveau max = 1
Pièce 5 => Niveau origine = 1 ; Niveau max = 2
Pièce 6 => Niveau origine = 2 ; Niveau max = 3
A chaque niveau correspond une valeur utilisée dans des calculs et ceci pour chaque pièce.
Le joueur peut faire évoluer chaque pièce indépendamment des autres. Par exemple il fait évoluer la pièce 1 au max en laissant toutes les autres au min.
Voici comment j'ai organisé ma bdd.
Une table 'valeurs' contient toutes les valeurs de toutes les pièces de tous les niveaux.
id_valeurs
nom_piece
niveau_piece
valeur_piece
La table suivante contient la composition des machines prédéfinies, au moment où le joueur la fabrique.
Cette table est nommée 'machines_de_base'.
id_machines_de_base
nom_machine
nom_piece
origine_max (0 ou 1) (permet de savoir si c'est le niveau d'origine ou le niveau max de la pièce)
niveau_piece
Vient ensuite la table contenant les machines des joueurs, quelles soient évoluées ou 100% d'origines.
Table 'machines_des_joueurs'
id_machines_des_joueurs
id_joueur
nom_machine
sufixe (permet de différencier les machines)
nom_piece
origine_max_actuel (0 1 ou 2)
niveau_piece
valeur
date_fin (champ où est indiqué la date de fin de fabrication/évolution)
Les 2 premières tables ne seront jamais modifiées. Ce sont les données "de départ". Le joueur aura la possibilité de modifier ses propres valeurs concernant ses machines qui seront stockées dans la table 'machines_des_joueurs'.
Chaque machine possédée est en fait divisée en 6 enregistrements de la table 'machines_des_joueurs' correspondant aux 6 pièces de la machine. 1 machine = 6 enregistrements
Comme cela l'évolution des pièces est très simple à faire car chaque enregistrement possède un champ 'date_fin' et un champ valeur.
Venons en maintenant à mon problème.
Je n'arrive pas à trouver une méthode efficace pour selectionner dans la base de données toutes les infos de la machine afin de valider sa fabrication...
nom machine -> pieces -> niveau origine/max -> valeurs
J'ai essayer avec des LEFT JOIN, des boucles dans des boucles ou des SELECT à la chaine mais il y a toujours un truc qui colle pas.
L'organisation de la BDD vous semble-t-elle judicieuse?
Je suis en train de me prendre la tête depuis plusieurs jours et je n'arrive pas à trouver une solution satisfaisante.
Un joueur peut fabriquer et faire évoluer des machines.
Une machine est décomposée en 6 pièces qui sont évoluables jusqu'à un certain niveau.
Nous avons donc:
MACHINE 1
Pièce 1 => Niveau origine = 1 ; Niveau max = 3
Pièce 2 => Niveau origine = 1 ; Niveau max = 5
Pièce 3 => Niveau origine = 3 ; Niveau max = 4
Pièce 4 => Niveau origine = 1 ; Niveau max = 1
Pièce 5 => Niveau origine = 1 ; Niveau max = 2
Pièce 6 => Niveau origine = 2 ; Niveau max = 3
A chaque niveau correspond une valeur utilisée dans des calculs et ceci pour chaque pièce.
Le joueur peut faire évoluer chaque pièce indépendamment des autres. Par exemple il fait évoluer la pièce 1 au max en laissant toutes les autres au min.
Voici comment j'ai organisé ma bdd.
Une table 'valeurs' contient toutes les valeurs de toutes les pièces de tous les niveaux.
id_valeurs
nom_piece
niveau_piece
valeur_piece
La table suivante contient la composition des machines prédéfinies, au moment où le joueur la fabrique.
Cette table est nommée 'machines_de_base'.
id_machines_de_base
nom_machine
nom_piece
origine_max (0 ou 1) (permet de savoir si c'est le niveau d'origine ou le niveau max de la pièce)
niveau_piece
Vient ensuite la table contenant les machines des joueurs, quelles soient évoluées ou 100% d'origines.
Table 'machines_des_joueurs'
id_machines_des_joueurs
id_joueur
nom_machine
sufixe (permet de différencier les machines)
nom_piece
origine_max_actuel (0 1 ou 2)
niveau_piece
valeur
date_fin (champ où est indiqué la date de fin de fabrication/évolution)
Les 2 premières tables ne seront jamais modifiées. Ce sont les données "de départ". Le joueur aura la possibilité de modifier ses propres valeurs concernant ses machines qui seront stockées dans la table 'machines_des_joueurs'.
Chaque machine possédée est en fait divisée en 6 enregistrements de la table 'machines_des_joueurs' correspondant aux 6 pièces de la machine. 1 machine = 6 enregistrements
Comme cela l'évolution des pièces est très simple à faire car chaque enregistrement possède un champ 'date_fin' et un champ valeur.
Venons en maintenant à mon problème.
Je n'arrive pas à trouver une méthode efficace pour selectionner dans la base de données toutes les infos de la machine afin de valider sa fabrication...
nom machine -> pieces -> niveau origine/max -> valeurs
J'ai essayer avec des LEFT JOIN, des boucles dans des boucles ou des SELECT à la chaine mais il y a toujours un truc qui colle pas.
L'organisation de la BDD vous semble-t-elle judicieuse?