pb d'"echo" avec requete sql "sum"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb d'"echo" avec requete sql "sum"

Re: pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 17:08

Merci !

Re: pb d'"echo" avec requete sql "sum"

par Cobaye » 12 août 2009, 16:46

en fait l'ensemble de tes union renvois la valeur de total (je schématise)

tu te retrouve donc avec la requete SELECT SUM(val) as totalval FROM total

Une requete ne peut retourner en colonne que ce qui se trouve entre son SELECT et son FROM donc la elle te retoure une colonne "sum(val)". Il est préconisé pour toutes les fonctions comme sum de mettre un alias avec de retrouver facilement le nom de la colonne

Re: pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 16:44

Voici le code complet correct, pour ceux que ça peut intéresser.
Mon but est de savoir combien de news sont contenues dans plusieurs tables, pour les afficher les cas échéant. Cette requête calcule la somme des nombres d'enregistrements de mes tables, si ce nombre est supérieur à 0, mes news s'affichent, sinon il n'y a rien.

L'astuce consiste à ajouter "as totalval" dans la requête sql (en plus de "AS total"), "totalval" étant reconnu ensuite pour le traitement en php...
$requete2 = mysql_query ("SELECT SUM(val) as totalval FROM (SELECT COUNT(*) AS val FROM disk d LEFT JOIN artiste_infos ai ON (d.disk_id = ai.disk_id) WHERE (ai.artiste_id = '".$artist_id."' AND d.news = '1') UNION SELECT COUNT(*) AS val FROM news_gigs ng WHERE (ng.artiste_id = '".$artist_id."' AND ng.gigs_date >= now()) UNION SELECT COUNT(*) AS val FROM news_various nv WHERE nv.artiste_id = '".$artist_id."') AS total") or die('Erreur : ' . mysql_error());
	 
	 while ($resultat2 = mysql_fetch_array($requete2)){
	 if ($resultat2[totalval] > '0') {
	 echo "NEWS";
	 include ("include/news.php");
	 } else {
	 echo "";
 }
 }

Re: pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 16:33

Ca marche !!!!! Peux-tu m'expliquer la logique ? Je n'aurai jamais trouvé...

Re: pb d'"echo" avec requete sql "sum"

par Cobaye » 12 août 2009, 16:30

$requete2 = mysql_query ("SELECT SUM(val) as totalval FROM (SELECT COUNT(*) AS val FROM disk d LEFT JOIN artiste_infos ai ON (d.disk_id = ai.disk_id) WHERE (ai.artiste_id = '".$artist_id."' AND d.news = '1') UNION SELECT COUNT(*) AS val FROM news_gigs ng WHERE (ng.artiste_id = '".$artist_id."' AND ng.gigs_date >= now()) UNION SELECT COUNT(*) AS val FROM news_various nv WHERE nv.artiste_id = '".$artist_id."') AS total") or die('Erreur : ' . mysql_error());
et comme ca ?

affiche $resultat2[totalval];

Re: pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 16:25

même message d'erreur...
et je viens de faire également le test sur phpMyadmin, si je retire "AS total", j'ai aussi le message d'erreur

Re: pb d'"echo" avec requete sql "sum"

par Cobaye » 12 août 2009, 16:22

ah oui vire le AS total que tu as la fin de ta requete

mysql ne retourne que ce qu'il y a entre select et from.

Re: pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 16:19

Merci pour ta réponse mais ça m'indique une message d'erreur :
Every derived table must have its own alias

Re: pb d'"echo" avec requete sql "sum"

par Cobaye » 12 août 2009, 16:16

Code : Tout sélectionner

SELECT SUM(val) as total
et la ca affichera quelques choses

pb d'"echo" avec requete sql "sum"

par wik » 12 août 2009, 15:32

Bonjour,

J'ai un souci pour visualiser via php une requête sql (qui fonctionne... vérifié dans PhpMysadmin). Rien ne se passe avec "echo", il reste vide, alors qu'il devrait me donner une valeur...

Voici le code :
$requete2 = mysql_query ("SELECT SUM(val) FROM (SELECT COUNT(*) AS val FROM disk d LEFT JOIN artiste_infos ai ON (d.disk_id = ai.disk_id) WHERE (ai.artiste_id = '".$artist_id."' AND d.news = '1') UNION SELECT COUNT(*) AS val FROM news_gigs ng WHERE (ng.artiste_id = '".$artist_id."' AND ng.gigs_date >= now()) UNION SELECT COUNT(*) AS val FROM news_various nv WHERE nv.artiste_id = '".$artist_id."') AS total") or die('Erreur : ' . mysql_error());
	 
	 while ($resultat2 = mysql_fetch_array($requete2)){
	 echo "$resultat2[total]";
 }
Merci d'avance d'éclairer ma lanterne, je suis larguée !