Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2007, 15h01   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Par défaut [SQL] Condition si aucun enregistrement correspond à la requête

Bonjour,

J'ai une table dans laquelle j'enregistre des parties de jeu. Si on a un gagnant, alors j'affecte un "1" dans la table gagnant. Si perdant = "0".

Je souhaite scruter tous mes enregistrements et retrouner le temps de reponse du gagnant (qui est dans la table)
Si je n'ai pas encore de gagnant, alors message...

Donc, j'essaie de construire ceci :

Code :
1
2
3
4
5
6
$data1=mysql_num_rows(mysql_query("SELECT temps_rep FROM participants WHERE gagnant=1 ORDER by id_partie DESC;"));
if ($data1[gagnant]==0){
echo "Pas encore de gagnant sur cette partie";			   		  
}else {
echo $data1[temps_rep]." secondes";
}
Alors que j'ai un gagnant dans la base, il me retourne qu'il n'y en a pas.

J'ai fais une erreur de syntaxe?

Merci
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 16h50   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
C'est normal, quand tu fais :
Code :
$data1=mysql_num_rows(mysql_query("
$data1 va contenir le nom d'enregisterments retournés par la requête SQL.

Donc $data1[gagnant] n'existe pas et vaut donc 0.
tu devaris faire
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 18h13   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Ben non, cela ne marche pas...

Du coup, j'essaies comme ceci, mais sans succes non plus...

Code :
1
2
3
4
5
6
7
$data1=mysql_fetch_array(mysql_query("SELECT temps_rep FROM participants WHERE gagnant=1 ORDER by id_partie DESC;"));
if ($data1[0]==0){
			  echo "Pas encore de gagnant sur cette partie";
 
			  }else {
			  echo $data1[0]." secondes";
			  }
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 19h02   #4
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
fais un echo de ta requete et lance la dans phpmyadmin pour vérifier que la requete soit bien correcte. AUssi bien ça peut venir de là.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 12h07   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$result=mysql_query("SELECT temps_rep FROM participants WHERE gagnant=1 ORDER by id_partie DESC;");
 
if (mysql_num_rows($result) == 0)
{
  echo "Pas encore de gagnant sur cette partie";
}
else 
{
  // fetch
  $data1 = mysql_fetch_array($result);
  echo $data1[0]." secondes";
}
plutot non?

Et penses au "or die..."
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 16h13   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Merci,

Mais en fait, j'ai mal dû exposer le problème...

Je pense que cela vient de ma requête.

J'ai des parties, j'ai 1 gagnant par partie et des perdants.

Le gagnant est reconnu dans la table avec un "1" dans le champs gagnant.

Je souhaite afficher le temps de réponse du gagnant de la partie à laquelle je viens de jouer.
Si j'ai effectivement un gagnant, tout va bien.

Par contre, si je suis le premier à répondre à la partie, et que je répond faux, alors je n'ai toujours pas de gagnant...

Alors que tel qu'est construite ma requete, si je suis dans ce cas là, alors il récupère le temps de reponse du gagnant de la dernière partie (avant celle que je viens de jouer)...

Parce qu'en fait, ma requete va chercher le temps de reponse du dernier gagnant (gagnant=1) de la dernire partie enregistrée...
Donc, si je n'ai pas encore de gagnant sur la partie en cours, alors il prend la partie précédente.

Alors qu'il devrait m'afficher qu'il ny a pas encore de gagnant sur la partie en cours.

Mais je n'arrive pas à construire la requete...

En gros, c'est : si je n'ai pas de gagnant sur la partie que je viens de jouer (donc la derniere), alors message pas de gagnant

EDIT : Alors que
Code :
if (mysql_num_rows($result) == 0)
me dit si je n'ai aucune ligne d'enregistrée, mettre le message..

Mais en fait, j'ai déjà une ligne enregistrée, la mienne, qui suis perdant..

Est ce que je me suis bien expliqué?
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 17h36   #7
Nouveau Membre du Club
 
Développeur informatique
Inscription : août 2007
Messages : 52
Détails du profil
Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2007
Messages : 52
Points : 37
Points : 37
Pour recuperer le dernier enregistrement de ta table, tu peux faire :
Code :
SELECT temps_rep,gagnant from participants ORDER BY ta_colonne_id desc LIMIT 1
Apres tu fais ton traitement
Code :
1
2
3
4
Si(pas de gagnant)
 message pas de gagnant
Sinon
 autre message
wanagro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 09h05   #8
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Merci, mais ce n'est pas cela...
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 09h12   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$result=mysql_query("SELECT gagnant, temps_rep FROM participants ORDER by id_partie DESC, gagnant DESC;");
 
// regarde si on a bien un gagnant pour la derniere partie
$data1 = mysql_fetch_array($result);
if($data1[0] == 1)
{
echo "la dernière partie a été gagnée en " . $data1[1] . " secondes";
}
else
{
echo "pas de gagnant";
}
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 10h13   #10
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
... Désolé...
Encore une fois je partais à l'envers...

Ca fonctionne...

Merci...
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web