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

wik
Eléphanteau du PHP | 29 Messages

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 !

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

12 août 2009, 16:16

Code : Tout sélectionner

SELECT SUM(val) as total
et la ca affichera quelques choses
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

wik
Eléphanteau du PHP | 29 Messages

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

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

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.
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

wik
Eléphanteau du PHP | 29 Messages

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

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

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];
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

wik
Eléphanteau du PHP | 29 Messages

12 août 2009, 16:33

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

wik
Eléphanteau du PHP | 29 Messages

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 "";
 }
 }

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

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
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

wik
Eléphanteau du PHP | 29 Messages

12 août 2009, 17:08

Merci !