Bonsoir à tous,
Je rencontre en ce moment une certaine difficulté à réaliser une requête qui me permette de récupérer des informations sur 3 tables qui ont en commun une clée.
Pour mieux vous expliquer mon problème, je préfère passer par un exemple concret pour bien illustrer le résultat escompé.
je précise également que j'ai déjà posté cette question sur phpcs dans la partie Mysql mais on m'a conseigné de venir également ici...(chose que je viens de faire)
En gros, ma requête doit me renvoyer les statistiques d'un joueur qui sont contenus dans 3 tables (il est possible que ce joueur ne soit que dans une seule table, voir 2 tables, voir 3 tables ou encore aucune) mais l'exemple ci-après sera plus explicite je vous rassure...
Soit 3 tables:1)
Table_fleet qui contient les champs suivants:
player
rank
points2)
Table_points qui contient les champs suivants:
player
rank
points3)
Table_research qui contient les champs suivants:
player
rank
pointsMaintenant, prenons un exemple de contenu possible (de ces 3 tables)
Contenu table_fleet:Test----------500--------------500000
Moi-----------400--------------700000
Contenu table_points:Test-----------200-------------136
Test2-----------1000----------80
Contenu table_research:
Test-----------300-------------1000000
Moi-------------800-------------800000
Il me faut une rêquete qui me permette de récupera les stats d'un joueur donné
Prenons par exemple pour le joueur
Moi:
La requête doit me revoyer:
de la table_fleetrank->400
points->700000
de la table_research
rank->800
points->800000
De même pour le joueur
Test:
la requête doit me renvoyer:
de la table_fleet rank->500
points->500000
de la table_points
rank->200
points->136
de la table_research
rank->300
points->1000000
Imaginons maitenant un joueur beta: la requête ne devra rien me retourner (vu que ce joueur n'est dans aucune des tables)
Actuellement je fais 3 requêtes pour arriver à ce résultat et je désire en faite, une méthode plus "propre" qui me permettrait d'avoir le même résultat mais avec une seule requête:
$sql1 = "select rank as rank_fleet, points as points_fleet from table_fleet where player='". $player .'"';
$sql2 = "select rank as rank_points, points as points_points from table_points where player='". $player .'"';
$sql3 = "select rank as rank_research, points as points_research from table_research where player='". $player .'"';
Sur le forum phpcs, malalam m'a fournit une alternative qui fonctionne et me renvoie bien ce qu'il faut (voir exemple) mais le problème, c'est que celà n'est toujours pas "propre" à mon sens et j'aimerais savoir s'il n'y aurait pas une méthode plus rapide que celle qui suit:
$sql = "SELECT
COALESCE((SELECT rank FROM ogspy_tshauniver14rank_fleet WHERE player='". $player ."'), 'n/a') AS rank_fleet,
COALESCE((SELECT points FROM ogspy_tshauniver14rank_fleet WHERE player='". $player ."'), 'n/a') AS points_fleet,
COALESCE((SELECT rank FROM ogspy_tshauniver14rank_points WHERE player='". $player ."'), 'n/a') AS rank_points,
COALESCE((SELECT points FROM ogspy_tshauniver14rank_points WHERE player='". $player ."'), 'n/a') AS points_points,
COALESCE((SELECT rank FROM ogspy_tshauniver14rank_research WHERE player='". $player ."'), 'n/a') AS rank_research,
COALESCE((SELECT points FROM ogspy_tshauniver14rank_research WHERE player='". $player ."'), 'n/a') AS points_research";
Bon cette dernière solution me convient mais dissons que s'il y a un autre moyen, je suis preneur.
Merci d'avance pour l'attention et l'aide que vous me fournirez.