Page 1 sur 1

Quand 2 clés etrangeres se référent à un meme champs

Posté : 04 janv. 2006, 00:59
par Franck77
Bonsoir à tous

Tout d'abord je vous explique mon architecture BDD

table Historique :
*id_historique
*actif
*passif
*id_piece
*id_action
*time

table Joueur :
*id_joueur
*pseudo

Voila je les attributs passif et actif de la table Historique sont enfait des clés étrangères se referant à l'id_joueur de la table Joueur.

Je voudrait faire une requête sql qui m'affiche le tableau historique avec les pseudos respectifs des clés actif et passif.

Comment faire une jointure quand on a deux clés étrangere se referant au meme champs ?

Posté : 04 janv. 2006, 01:17
par Cyrano
L'architecture proposée est curieuse... Enfin je crois que j'ai une vague idée : si le champ time correspond à une heure précise pour une action de jeu dont tu voudrais retracer l'historique, tu pourrais avoir quelque chose du genre :

Code : Tout sélectionner

SELECT id_joueur, pseudo, id_piece, id_action, time FROM Historique, Joueur WHERE (id_joueur = actif AND passif = NULL) OR (id_joueur = passif AND actif = NULL) ORDER BY time
Corrige moi si je me trompe, on dirait un algo de jeu d'échec en ligne : c'est quelque chose comme ça ?

Posté : 04 janv. 2006, 01:54
par Franck77
Salut Cyrano,

Enfait, je suis entrain de developper une sorte de jeu de role, et ma table historique mémorisera toutes les actions.

Sachant qu'une action peut mettre en scene 1 ou 2 personnage (dans ce cas, un actif et un passif)

Ex : A frappe B. (A est actif, et B passif)

Ainsi je noterai dans ma table Historique, l'id de A (actif), l'id de B (passif, l'id de l'action (frapper), l'id de la piece (le lieu), et enfin le time (pour pouvoir refaire le film du jeu).

Comme il existe des action mettant en scene une seule personne, le champs passif peut etre NULL.

Voila, et donc je cherche la bonne requete pour afficher ma table Historique avec les pseudos a la place des id.

Je réexplique si je ne suis pas assez clair (j'avoue que ma requete est curieuse :D)

Posté : 04 janv. 2006, 02:12
par Franck77
J'ai fait un petit shema pour mieux comprendre :

Image

Posté : 04 janv. 2006, 09:24
par Cyrano
Il me semble qu'il manque un identifiant de partie dans ton historique: si un même joueur dispute plusieurs parties, comment le distingueras-tu entre deux parties différentes ? :-k

Posté : 04 janv. 2006, 10:31
par Franck77
Pas de souci car a chaque nouvelle partie, un nouveau joueur est créé (meme si c le meme joueur physique). Il n'y a pas de compte joueur.

Posté : 04 janv. 2006, 10:45
par Cyrano
As-tu essayé d'adapter et d'utiliser la requête que j'ai proposé plus haut ?

Posté : 04 janv. 2006, 17:06
par Franck77
Oui mais en vain. J'y suis finalement parvenu en utilisant deux requêtes ;)

Merci tout de meme pour ton aide et à bientot !