Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 16/03/2011, 16h25   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 67
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 67
Points : 4
Points : 4
Par défaut Calculer % Et Update de la bdd

Bonjour,

Voila je voudrais calculer les points des filleuls d'un membre , dans un jeux , après de faire 10 % de ces points .D'accumuler le résultat de tous les filleuls et d'ajouter ce résultat au point du parrain .

L'erreur est :
Citation:
You can't specify target table 'membre' for update in FROM clause
Le code :
Code :
1
2
3
$pseudo = mysql_real_escape_string($_SESSION['pseudo']);
$sql = "UPDATE membre SET pointtotal = pointtotal + ((SELECT SUM(pointtotal) FROM membre WHERE referent = '{$pseudo}')*0.1) WHERE pseudo = '{$pseudo}' ";
mysql_query($sql) or die(mysql_error());
Merci
max1395 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h31   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
tu peux pas :
Citation:
Currently, you cannot update a table and select from the same table in a subquery.
tu peux le faire en deux requete :
Code :
1
2
3
4
5
6
$pseudo = mysql_real_escape_string($_SESSION['pseudo']);
$sqlPoint = "SELECT SUM(pointtotal)*0.1 as totalPoint FROM membre WHERE referent = '{$pseudo}'";
$resultat = mysql_query($sql1) or die(mysql_error());
$totalPoint = mysql_result($resultat, 0,"totalPoint");
$sql = "UPDATE membre SET pointtotal = pointtotal + $totalPoint WHERE referent = '{$pseudo}'";
mysql_query($sql) or die(mysql_error());
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h36   #3
Invité de passage
 
Inscription : décembre 2008
Messages : 67
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 67
Points : 4
Points : 4
Quoi ? Dsl mais je n'ai pas compris , où est le problème ?
max1395 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h42   #4
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
revoila :
Code :
1
2
3
4
5
6
$pseudo = mysql_real_escape_string($_SESSION['pseudo']);
$sqlPoint = "SELECT SUM(pointtotal)*0.1 as totalPoint FROM membre WHERE referent = '{$pseudo}'";
$resultat = mysql_query($sql1) or die(mysql_error());
$totalPoint = mysql_result($resultat, 0,"totalPoint");
$sql = "UPDATE membre SET pointtotal = pointtotal + $totalPoint WHERE pseudo = '{$pseudo}'";
mysql_query($sql) or die(mysql_error());
non tu ne peux pas imbriquer une requete sur ta table membre pour updater la table membre...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h53   #5
Invité de passage
 
Inscription : décembre 2008
Messages : 67
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 67
Points : 4
Points : 4
Ah d'accord . Mais 2 choses , je ne comprends pas pourquoi tu mets

Code :
1
2
3
4
5
6
7
 
$pseudo = mysql_real_escape_string($_SESSION['pseudo']);
$sqlPoint = "SELECT SUM(pointtotal)*0.1 as totalPoint FROM membre WHERE referent = '{$pseudo}'"; // point total 
$resultat = mysql_query($sql1) or die(mysql_error());
$totalPoint = mysql_result($resultat, 0,"totalPoint"); // totalPoint , pourquoi ces 2 nom ? dans ma table je n'ai que pointtotal .
$sql = "UPDATE membre SET pointtotal = pointtotal + $totalPoint WHERE pseudo = '{$pseudo}'";
mysql_query($sql) or die(mysql_error());
Et quand j'essays sa me marque :

Query was empty

Dsl je suis débutant je ne sais pas trop qu'est ce que ça veut dire .
max1395 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h09   #6
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
ma faute dsl, c'est pas $sql1 mais $sqlPoint à la troisième ligne, l'erreur te dit que la requete est vide et effectivement $sql1 est vide...
dans un premier temps je fais le calcul que tu veux faire, c a d que je récupere le résultat de la somme des point des membres dont $pseudo est le réferent * 0.1 ensuite je l'additionne au point de $pseudo dans un second temps...
et pour totalPoint c'est juste un alias, une variable si tu veux dans laquelle je stock le resultat du calcul...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h42   #7
Invité de passage
 
Inscription : décembre 2008
Messages : 67
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 67
Points : 4
Points : 4
Effectivement , ça marche correctement , Merci beaucoup
max1395 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 19h08.


 
 
 
 
Partenaires

Hébergement Web