Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Bonsoir,
Ma table user possède plusieurs champs : itouch (qui peut prendre les valeurs "1G", "2G", "3G), iphone (idem), jailbreak (1 ou 0).
Mon but est de créer un plugin de statistiques affichant le nombre de membre ayant un iPod Touch Jailbreaker / non Jailbreaker; combien de membre possèdent un iPod Touch 1G, 2G, 3G...
Le script que j'ai fait marche très bien, mais est à mon avis assez lourd (faire tant de requêtes)... Par exemple :
// -----------------------------------------------------------------------
echo '<strong><u>iPod Touch ou iPhone ? :</u></strong><br /><br />';
$query = $db->query('SELECT itouch FROM '. $db->prefix .'users WHERE itouch="1G" OR itouch="2G" OR itouch="3G"') or error('Unable to fetch wow config', __FILE__, __LINE__, $db->error());
$num_itouch = $db->num_rows($query);
echo 'iPod Touch : '.$num_itouch.'<br />';
$query = $db->query('SELECT iphone FROM '. $db->prefix .'users') or error('Unable to fetch wow config', __FILE__, __LINE__, $db->error());
$num_iphone = $db->num_rows($query);
echo 'iPhone : '.$num_iphone.'<br />';
// -----------------------------------------------------------------------
echo '<br /><br /><strong><u>A propos du Jailbreak :</u></strong><br /><br />';
// Requete pour récupérer le nombre d'iPod Touch Jailbreaker
$query = $db->query('SELECT jailbreak FROM '. $db->prefix .'users WHERE jailbreak=1') or error('Unable to fetch wow config', __FILE__, __LINE__, $db->error());
$num_jailbreak = $db->num_rows($query);
echo 'iPod Touch / iPhone Jailbreaker : '.$num_jailbreak.'<br />';
// Requete pour récupérer le nombre d'iPod Touch NON Jailbreaker
$query = $db->query('SELECT jailbreak FROM '. $db->prefix .'users WHERE jailbreak=0') or error('Unable to fetch wow config', __FILE__, __LINE__, $db->error());
$num_jailbreak = $db->num_rows($query);
echo 'iPod Touch / iPhone non Jailbreaker : '.$num_jailbreak.'';Il doit surement y avoir BEAUCOUP plus simple.... (traitement coté PHP ?) !
Merci.
Hors ligne
Essaye avec cette requête :
$query = $db->query('SELECT SUM(IF(itouch = "1G", 1, 0)) AS nb_itouch_1G, SUM(IF(itouch = "2G", 1, 0)) AS nb_itouch_2G, SUM(IF(itouch = "3G", 1, 0)) AS nb_itouch_3G, SUM(IF(itouch IN ("1G", "2G", "3G"), 1, 0)) AS nb_itouch, SUM(IF(jailbreak = "1", 1, 0)) AS jailbreak_oui, SUM(IF(jailbreak = "0", 1, 0)) AS jailbreak_non FROM '. $db->prefix .'users') or error('Unable to fetch wow config', __FILE__, __LINE__, $db->error());Elle te donne le nombre de personnes pour chaque version d'itouch, et le nombre d'itouch (non-)jailbreaké. Tu pourras facilement ajouter les champs pour iPhone en regardant un peu comment j'ai fait 
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
@fanf73 : joli... 
(intuitivement, j'étais parti sur une autre méthode, mais je me cassais la tête pour pas grand chose...)
Hors ligne
Bonjour fanf73,
Merci pour cette requête !
Moi qui me cantonne généralement à des requêtes basiques, j'en reste bouche B ! J'ai fais quelques recherches sur le AS, qui serait un "alias".
Mais comment j'exploite cette requête pour afficher les stats ?
Edit :
Sa semble fonctionner :
while($reponse = $db->fetch_assoc($query))
{
$itouch_1G = $reponse['nb_itouch_1G'];
$itouch_2G = $reponse['nb_itouch_2G'];
$itouch_3G = $reponse['nb_itouch_3G'];
}
echo 'Nombre d\'iPod Touch 1G : '.$itouch_1G.'';
echo 'Nombre d\'iPod Touch 2G : '.$itouch_2G.'';
echo 'Nombre d\'iPod Touch 3G : '.$itouch_3G.'';Si vous avez un meilleur moyen, je suis preneur
!
Merci encore.
Dernière modification par guicara (08-11-2009 15:33:14)
Hors ligne
D'ailleurs, pourquoi la syntaxe (?) :
IF(itouch = "1G", 1, 0))Ne peux on mettre :
IF(itouch = "1G"))Dernière modification par guicara (09-11-2009 00:50:50)
Hors ligne
Si tu mets ta syntaxe, il ne sait pas ce qu'il faut sommer, c'est comme si tu mettais un IF en PHP sans rien à faire derrière.
Là, il parcours toutes les lignes et il ajoute :
- 1 si le champs vaut 1GG
- 0 si le champs ne vaut pas
Donc tu te retrouves bien avec le nombre de users ayant un iTouch 1G.
Tu peux remplacer
while($reponse = $db->fetch_assoc($query))
{
$itouch_1G = $reponse['nb_itouch_1G'];
$itouch_2G = $reponse['nb_itouch_2G'];
$itouch_3G = $reponse['nb_itouch_3G'];
}Par
$reponse = $db->fetch_assoc($query);
$itouch_1G = $reponse['nb_itouch_1G'];
$itouch_2G = $reponse['nb_itouch_2G'];
$itouch_3G = $reponse['nb_itouch_3G'];Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Oui je vois.
Merci encore (décidément cette communauté est une source d'infos inépuisable) !
Hors ligne
Gros GG !! wouw 
Hors ligne
Par
$reponse = $db->fetch_assoc($query); $itouch_1G = $reponse['nb_itouch_1G']; $itouch_2G = $reponse['nb_itouch_2G']; $itouch_3G = $reponse['nb_itouch_3G'];
Que l'on peut encore simplifier par :
$reponse = $db->fetch_assoc($query);
extract($reponse);Et on se retrouve avec les variables $nb_itouch_1G, $nb_itouch_2G, $nb_itouch_3G remplies avec les bonnes valeur. Ces noms de variables peuvent être changés en les remplaçant dans les AS nb_itouch_1G, etc. de la requête.
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche
Hors ligne
Et encore plus simplement sans déclarer de variable : on peut très bien utiliser $reponse['nb_itouch_1G'] directement dans un "echo" 
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Merci pour toutes ces bonnes idées !
Apprendre que mon code de départ peut se résumer en 3 lignes.... whaa !
Hors ligne
Pages : 1