JeuWeb - Crée ton jeu par navigateur
Requête MySQL avec Join - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Requête MySQL avec Join (/showthread.php?tid=1859)

Pages : 1 2 3 4


RE: Requète MySQL avec join - Anthor - 02-03-2008

Citation :Je voudrait pouvoir sélectionner les joueurs ayant une réputation faible
(disons <100) ou qui na pas de réputation du tout, comment faire ?

Ha bon... Je croyais qu'on parlait de réputation ^^


RE: Requète MySQL avec join - jo_link_noir - 02-03-2008

me suis gourer XD
bah je sais pas alors, si personne ne trouve je (re)esseyer plus tard

EDIT :
Code PHP :
<?php 
SELECT player
.id
FROM player
LEFT JOIN reputation
ON player
.id = reputation.playerid
WHERE reputation
.valeur < 100 OR reputation.valeur IS NULL
j'optient ça...


RE: Requète MySQL avec join - Ludvig - 03-03-2008

Comme je suis au taf alors je peux pas essayer la solution de j-12 mais est-ce que le
jointure ne va pas enlever tout entrée dans player qui n'a pas de correspondace dans reputation ?

Peut-être que je n'explique pas bien, voila une solution en php
(tapé de tête hein et simplifié) :

Code PHP :
<?php 
$ap
=getallsql( "SELECT id FROM player WHERE xpos=123 AND ypos=234"); //<- retourne une array avec tout les joueurs sur la case 123,234
$nofap=count($ap); //les compter
for($i=0;$i<$nofap;$i++) //passer dans la moulinette
{
$playerid=$ap[$i];
$tmp=getsql("SELECT value FROM reputation WHERE playerid="$playerid" LIMIT 1"); //essayer de trouver la réputation du joueur
if((!$tmp)||($tmp<100)) //ici le joueur n'a pas d'entrée ou pas assez de réputation :
{
//Faire chose
}
}
// getallsql() et getsql() sont des fonctions de requête sql, le premier
//renvoi une array de toutes les réponses, le deuxième juste une réponse.

Vous voyez, c'est pas trop top optimisation ça, alors je m'était dit qu'une requête MySQL bien ficelé pourrait faire l'affaire Big Grin


RE: Requète MySQL avec join - Anthor - 03-03-2008

@j-12 : C'est la même chose que ce que je post depuis le début...

@ludvig : Dis moi tu lis les réponses faîtes entre temps ?


RE: Requète MySQL avec join - Ludvig - 03-03-2008

Oui oui, j'essaye en plus (évidemment) tout les requêtes.

c'est pour ça d'ailleurs que j'ai essaye de clarifier le problème, enfin
si j'ai loupé le bon réponse merci de me fouetter vigoureusement ^^


/Ludvig


RE: Requète MySQL avec join - Loetheri - 03-03-2008

Je ne comprends pas ce qui ne vas pas.
Normalement, la requête d'Anthor doit fonctionner.

Tu utilises bien MySQL ? Tu traîtes comment tes requêtes ? Tu les exécutes où ça ?
Essaye avec un Right Join, même si cela ne devrait pas fonctionner en théorie. Personnellement, je reste persuader que tu as dû te tromper. Mais bon, c'est peut-être nous qui sommes dans l'erreur.


RE: Requète MySQL avec join - jo_link_noir - 03-03-2008

Anthor a écrit :@j-12 : C'est la même chose que ce que je post depuis le début...

oui c'est exacte mais quand je met IS NULL ça me prend les champs avec comme valeur NULL, ce qui ne marche pas avec simplement reputation.valeur=NULL Oo


RE: Requète MySQL avec join - Ludvig - 03-03-2008

Ah, ça avance avec le IS NULL !

Mais ce n'est pas encore exactement ça :pleure2:

donc voila j'ai la table "player" avec un id, nom etc
[Image: plr.gif]

et la table reputation qui groupe plusieurs réputations :
[Image: rep.gif]

Ici on vois que
joueur 1 est en guerre avec la faction "1" et en paix avec la faction "2"
joueur 2 est en guerre avec la faction "1" et "2" (en dessous de 100 pour la "1" et pas d'entré pour la "2")
joueur 3 est en guerre avec la faction "1" et "2" (car aucun entré du tout).

Donc je voudrais pouvoir selectionner ceux qui sont en guerre avec la faction "1" ou la faction "2".

Cette requette fais presque l'affaire, ça marche quand $FACTION==1
mais le joueur n° 2 est omis quand je mets $FACTION=2...

Code PHP :
<?php 
SELECT player
.id, reputation.value
FROM player
LEFT JOIN reputation ON player
.id = reputation.playerid
WHERE
(
reputation.value IS NOT NULL
AND
reputation.value <100
AND
reputation.reputid = $FACTION
)
OR
reputation.value IS NULL


Déjà merci pour tout aide j'espère que je ne vous soule pas trop :malade:


/Ludvig


RE: Requète MySQL avec join - Anthor - 03-03-2008

Code PHP :
<?php 
SELECT player
.*, reputation.value
FROM player
LEFT JOIN reputation ON player
.id = reputation.playerid
AND reputation.reputid = $FACTION

Voilà.

Pour la faction 1 =>
Code :
1    Ludvig    -1
2    Ludor     75
3    Ankou    NULL

Pour la faction 2 =>
Code :
1    Ludvig    500
2    Ludor     NULL
3    Ankou    NULL

Tu dois ensuite faire la vérification de value par PHP.


RE: Requète MySQL avec join - Ludvig - 03-03-2008

Excellent mille merci ça fonctionne !

J'ai même pu rajouter le tri dedans :
Code PHP :
<?php 
SELECT player
.id, reputation.value
FROM player
LEFT JOIN reputation ON player
.id = reputation.playerid
AND reputation.reputid = $FACTION
WHERE player
.id<=3
AND
(
reputation.value IS NULL
OR
reputation.value<100
)

Vraiment super top merci encore à tout le monde :wow: