PHP->Besoin d'aide pour une requête

gcvoiron

WRInaute occasionnel
Bonjour,

La requête ci-dessous sert à faire un "Top-Parrain".
>Id par id, je veux chercher le nombre de filleuls(=nombre de membres qui ont l'id X pour refererid), puis stocker la valeur trouver dans le nbref (nombre de filleuls) correspondant à l'id...

Code:
<?php
include('header.inc.php');
$requete = mysql_query("SELECT id FROM demo_a_accounts") or die(mysql_error();
while ($myrow = mysql_fetch_row($requete)) 
{
	$req = "SELECT id FROM demo_a_accounts WHERE refererid=" .$myrow[0]. "";
	$res = mysql_query($req) or die(mysql_error());
	$num_rows = mysql_num_rows($req);
	$ask= "UPDATE `demo_a_accounts` SET `nbref` = '".$num_rows."' WHERE `id` = '" .$myrow[0]. "'";
	$result = mysql_query($ask) or die(mysql_error());
}
?>

J'ai des erreurs de ce type :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home.10.6/boosttra/www/topparrain.php on line 8

Quelqu'un aurait une idée de l'erreur ?

Merci.
 

gcvoiron

WRInaute occasionnel
Merci, ça marche avec :

Code:
<?php
include('header.inc.php');
$requete = mysql_query("SELECT id FROM demo_a_accounts") or die(mysql_error());
while ($myrow = mysql_fetch_row($requete)) 
{
	$req = "SELECT id FROM demo_a_accounts WHERE refererid=".$myrow[0]."";
	$res = mysql_query($req) or die(mysql_error());
	$num_rows = mysql_num_rows(mysql_query($req));
	$ask= "UPDATE `demo_a_accounts` SET `nbref` = '".$num_rows."' WHERE `id` = '".$myrow[0]."'";
	$result = mysql_query($ask) or die(mysql_error());
}
?>

:D
 

Bh@Mp0

WRInaute discret
Plus simple peut-être, en 1 requête (mais faudra vérifier la syntaxe) :
Code:
UPDATE `demo_a_accounts` A1 SET A1.`nbref` = (SELECT count(DISTINCT A2.id) FROM `demo_a_accounts` A2 WHERE A2.`refererid`=A1.`id`);

Ou, au pire, en n+1 requêtes (au lieu de 2n+1 requêtes) :
Code:
SELECT A1.id, count(DISTINCT A2.id) AS c FROM `demo_a_accounts` A1 LEFT JOIN `demo_a_accounts` A2 ON A2.`refererid`=A1.`id`;
puis, pour chaque résultat renvoyé :
UPDATE `demo_a_accounts` SET `nbref` = '".$row["c"]."' WHERE `id`='".$row["id"]."';
 

gcvoiron

WRInaute occasionnel
Je ne connais pas du tout la syntaxe du code que tu utilise...
J'essaye ceci ?
Code:
<?php
include('header.inc.php');
UPDATE `demo_a_accounts` A1 SET A1.`nbref` = (SELECT count(DISTINCT A2.id) FROM `demo_a_accounts` A2 WHERE A2.`refererid`=A1.`id`);
?>
 

gcvoiron

WRInaute occasionnel
Avec :
Code:
<?php
include('header.inc.php');
$requete = "UPDATE `demo_a_accounts` A1 SET A1.`nbref` = (SELECT count(DISTINCT A2.id) FROM `demo_a_accounts` A2 WHERE A2.`refererid`=A1.`id`);";
$result = mysql_query($requete) or die(mysql_error());
?>
J'ai l'erreur :
Code:
You can't specify target table 'A1' for update in FROM clause
 

gcvoiron

WRInaute occasionnel
Et si j'utilise :
Code:
<?php
include('header.inc.php');
mysql_query("SELECT A1.id, count(DISTINCT A2.id) AS c FROM `demo_a_accounts` A1 LEFT JOIN `demo_a_accounts` A2 ON A2.`refererid`=A1.`id`") or die(mysql_error()); 
mysql_query("UPDATE `demo_a_accounts` SET `nbref` = '".$row["c"]."' WHERE `id`='".$row["id"]."'") or die(mysql_error());
?>
J'ai l'erreur :
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Auriez-vous une idée du problème ?

Merci.
 

Discussions similaires

Haut