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

Franck77
Invité n'ayant pas de compte PHPfrance

04 janv. 2006, 00:59

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 ?

Mammouth du PHP | 19672 Messages

04 janv. 2006, 01:17

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Franck77
Invité n'ayant pas de compte PHPfrance

04 janv. 2006, 01:54

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)

Franck77
Invité n'ayant pas de compte PHPfrance

04 janv. 2006, 02:12

J'ai fait un petit shema pour mieux comprendre :

Image

Mammouth du PHP | 19672 Messages

04 janv. 2006, 09:24

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Franck77
Invité n'ayant pas de compte PHPfrance

04 janv. 2006, 10:31

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.

Mammouth du PHP | 19672 Messages

04 janv. 2006, 10:45

As-tu essayé d'adapter et d'utiliser la requête que j'ai proposé plus haut ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Franck77
Invité n'ayant pas de compte PHPfrance

04 janv. 2006, 17:06

Oui mais en vain. J'y suis finalement parvenu en utilisant deux requêtes ;)

Merci tout de meme pour ton aide et à bientot !