malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 janv. 2006 à 10:25
Alors, 2 requêtes :-(
SELECT
HISTO.ID_PIECE,
HISTO.ID_ACTION,
HISTO.TIME,
HISTO.PASSIF,
JR.PSEUDO AS PSEUDO_ACTIF
FROM
HISTORIQUE HISTO, JOUEUR JR
WHERE
HISTO.ACTIF = JR.ID_JOUEUR
mysql_query ...
while ($res = mysql_fetch_assoc(...)) {
// SELECT JR.PSEUDO FROM JOUEUR JR WHERE JR.ID_JOUEUR = '.$res['PASSIF'].'
// on récupère : mysql_query, mysql_fetch_assoc dans $res2...
// et enfin, on affiche chaque $res et $res2.
}
cs_Franquito
Messages postés61Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention23 décembre 2006 4 janv. 2006 à 09:33
Enfait je souhaite afficher le tableau Historique, mais a la place
d'avoir les numero d'actif et passif, je voudrais avoir leur pseudo.
J'ai un debut de réponse avec cette maniere de proceder, mais le probleme c'est que cela n'affiche rien lol.
SELECT h.id_historique, j1.pseudo AS joueurActif, j2.pseudo AS joueurPassif, h.id_piece, h.id_action, h.time
FROM Historique AS h, Joueur AS j1, Joueur AS j2
WHERE h.actif = j1.id_joueur
AND h.passif = j2.id_joueur
AND (
h.actif =14
OR h.passif =14
)
cs_f6xara
Messages postés68Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention 6 février 2008 4 janv. 2006 à 09:43
Tu dois le faire sous 2 requetes car tu fais les jointures correspondantes à une requete ou tu voudrais tous les passifs ET actifs
SELECT id_historique, pseudo, id_piece, id_action, time
FROM Historique , Joueur
WHERE actif = id_joueur
AND actif =14
SELECT id_historique, pseudo, id_piece, id_action, time
FROM Historique , Joueur
WHERE passif = id_joueur
AND passif =14
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 janv. 2006 à 09:57
Hello,
SELECT
HISTO.ID_PIECE,
HISTO.ID_ACTION,
HISTO.TIME,
JR.PSEUDO AS PSEUDO_ACTIF,
JR2.PSEUDO AS PSEUDO_PASSIF
FROM
HISTORIQUE HISTO,
JOUEUR JR,
JOUEUR JR2
WHERE JR2.PSEUDO (SELECT JOUEUR.PSEUDO FROM JOUEUR WHERE JOUEUR.ID_JOUEUR HISTO.PASSIF) AND JR.PSEUDO (SELECT JOUEUR.PSEUDO FROM JOUEUR WHERE JOUEUR.ID_JOUEUR HISTO.ACTIF)
cs_Franquito
Messages postés61Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention23 décembre 2006 4 janv. 2006 à 13:21
Ok merci bien cela marche. Par contre j'aurai une autre question. Il
est possible que le champs passif soit NULL ou bien "0" quand l'action
ne fait pas intervenir de second joueur.
Dans ce cas la, comment dois je rediger la seconde requête pour ne pas
qu'elle cherche le pseudo de passif qu'elle ne trouvera jamais ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 janv. 2006 à 13:25
dans le while de la 1ère requête :
if (0 != $res['PASSIF'] || null != $res['PASSIF']) {
// seconde requête, on obtiendra le pseudo passif dans $res2['PSEUDO']
} else {
$res2['PSEUDO'] = 'pas de pseudo passif';
}
//affichage de $res et $res2.
cs_Franquito
Messages postés61Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention23 décembre 2006 4 janv. 2006 à 13:38
Cela marche impeccable, par contre mon code n'est peut etre pas le mieux, j'ai recupéré mes anciens code de de php/sql.
J'ai fait ainsi :
require('_connex.php');
$sql = 'SELECT
H.id_piece,H.id_action,H.time,H.passif,J.pseudo AS Pseudo_actif FROM
Historique H, Joueur J WHERE H.actif = J.id_joueur AND
actif="'.$_SESSION[id_joueur].'" ORDER BY id_historique ASC';
$query = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_array($query)) {
if($data['passif']!=0)
{
$sql2 'SELECT J.pseudo FROM Joueur J WHERE J.id_joueur "'.$data['passif'].'"';
$query2 = mysql_query($sql2) or
die('Erreur SQL !
'.$sql2.'
'.mysql_error());
while($data2 = mysql_fetch_array($query2)) {
echo $data["time"]." :
".$data["type"]." de ".$data["Pseudo_actif"]." sur ".$data2["pseudo"]."
dans ".$data["id_piece"]."
";
}
}
else
{
echo $data["time"]." :
".$data["type"]." de ".$data["Pseudo_actif"]." dans
".$data["id_piece"]."
";
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 janv. 2006 à 13:47
Re :-)
Je ne pige pas cette clause dans ta requête principale :
AND actif="'.$_SESSION[id_joueur].'"
Elle sert à quoi? En plus, tu devrais utiliser h.actif.
mysql_fetch_array () en l'état ne sert pas à grand chose, puisqu'elle va faire double emploi : renvoyer à la fois des index numériques ET des index associatifs. Si tu veux utiliser des index associatifs, utilise soit mysql_fetch_assoc, soit mysql_fetch_array avec l'option <tt>MYSQL_ASSOC
http://fr2.php.net/manual/fr/function.mysql-fetch-array.php
</tt>Il est préférable d'utiliser des apostrophes, que ce soit dans echo, ou tes clefs associatives, ou tes chaînes autres (requêtes par exemple) :
echo 'bla =>', $tab['clef'];
Et tu peux utiliser require_once() au lieu de require().
cs_Franquito
Messages postés61Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention23 décembre 2006 4 janv. 2006 à 13:51
Ok je vais remplacer mysql_fetch_array par mysql_fetch_assoc si je comprend bien.
En revanche, j'utilise la session[id_joueur] car c'est pour afficher
l'historique des actions du joueur connecté. Je ne veux pas que le
joueur puisse consulter l'historique de ses semblabes ;)