Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 07-11-2009 18:57:08

guicara
Membre

Optimisation d'un scrit (aide php, sql)

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

#2 07-11-2009 21:08:46

fanf73
Wik-wiki

Re : Optimisation d'un scrit (aide php, sql)

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 wink


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

#3 08-11-2009 04:24:48

Mpok
Néo Admin

Re : Optimisation d'un scrit (aide php, sql)

@fanf73 : joli... ^^
(intuitivement, j'étais parti sur une autre méthode, mais je me cassais la tête pour pas grand chose...)

Hors ligne

#4 08-11-2009 15:20:40

guicara
Membre

Re : Optimisation d'un scrit (aide php, sql)

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

#5 08-11-2009 21:30:12

NoX09
Membre

Re : Optimisation d'un scrit (aide php, sql)

Très interessant. Je ne savais pas qu'on pouvait mettre des conditions dans une requête SQL.


Utiliser : FAQ - AIDE - RECHERCHE

Hors ligne

#6 09-11-2009 00:50:14

guicara
Membre

Re : Optimisation d'un scrit (aide php, sql)

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

#7 09-11-2009 10:02:25

fanf73
Wik-wiki

Re : Optimisation d'un scrit (aide php, sql)

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

#8 11-11-2009 15:23:35

guicara
Membre

Re : Optimisation d'un scrit (aide php, sql)

Oui je vois.
Merci encore (décidément cette communauté est une source d'infos inépuisable) !

Hors ligne

#9 11-11-2009 16:37:33

noxo.
Membre

Re : Optimisation d'un scrit (aide php, sql)

Gros GG !! wouw happy

Hors ligne

#10 12-11-2009 14:31:32

Otomatic
Régisseur

Re : Optimisation d'un scrit (aide php, sql)

fanf73 a écrit :

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

#11 12-11-2009 20:00:22

fanf73
Wik-wiki

Re : Optimisation d'un scrit (aide php, sql)

Et encore plus simplement sans déclarer de variable : on peut très bien utiliser $reponse['nb_itouch_1G'] directement dans un "echo" smile


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

#12 15-11-2009 16:06:48

guicara
Membre

Re : Optimisation d'un scrit (aide php, sql)

Merci pour toutes ces bonnes idées !
Apprendre que mon code de départ peut se résumer en 3 lignes.... whaa !

Hors ligne

Pied de page des forums