Page 1 sur 1
pb d'"echo" avec requete sql "sum"
Posté : 12 août 2009, 15:32
par wik
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 !
Re: pb d'"echo" avec requete sql "sum"
Posté : 12 août 2009, 16:16
par Cobaye
et la ca affichera quelques choses
Re: pb d'"echo" avec requete sql "sum"
Posté : 12 août 2009, 16:19
par wik
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"
Posté : 12 août 2009, 16:22
par Cobaye
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"
Posté : 12 août 2009, 16:25
par wik
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"
Posté : 12 août 2009, 16:30
par Cobaye
$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"
Posté : 12 août 2009, 16:33
par wik
Ca marche !!!!! Peux-tu m'expliquer la logique ? Je n'aurai jamais trouvé...
Re: pb d'"echo" avec requete sql "sum"
Posté : 12 août 2009, 16:44
par wik
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"
Posté : 12 août 2009, 16:46
par Cobaye
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"
Posté : 12 août 2009, 17:08
par wik
Merci !