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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

gcvoiron
WRInaute impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

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

Message le Mer Jan 03, 2007 18:27

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: Tout sélectionner
<?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.

DomicilePC
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 210
Inscription: Lun Jan 17, 2005 15:50

Message le Mer Jan 03, 2007 18:37

change
$num_rows = mysql_num_rows($req);
par
$num_rows = mysql_num_rows($res);

gcvoiron
WRInaute impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

Message le Mer Jan 03, 2007 18:39

Merci, ça marche avec :

Code: Tout sélectionner
<?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

marion17
WRInaute passionné
WRInaute passionné
 
Messages: 518
Inscription: Sam Nov 11, 2006 18:24

Message le Mer Jan 03, 2007 18:45

c'est genial, merci à DomicilePC alors :)

Bonne chance gcvoiron !

DomicilePC
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 210
Inscription: Lun Jan 17, 2005 15:50

Message le Mer Jan 03, 2007 18:53

je vous en prie...


Bh@Mp0
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 245
Inscription: Mar Jan 18, 2005 19:02

Message le Mer Jan 03, 2007 18:55

Plus simple peut-être, en 1 requête (mais faudra vérifier la syntaxe) :
Code: Tout sélectionner
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: Tout sélectionner
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 impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

Message le Mer Jan 03, 2007 19:25

Je ne connais pas du tout la syntaxe du code que tu utilise...
J'essaye ceci ?
Code: Tout sélectionner
<?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 impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

Message le Mer Jan 03, 2007 20:07

Avec :
Code: Tout sélectionner
<?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: Tout sélectionner
You can't specify target table 'A1' for update in FROM clause

gcvoiron
WRInaute impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

Message le Jeu Jan 04, 2007 0:15

Et si j'utilise :
Code: Tout sélectionner
<?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.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités