Optimisation de code

Petit nouveau ! | 8 Messages

12 févr. 2008, 16:21

je viens de voir ta requète, pffff comment c'est monstrueux de connaitre ces requètes optimisées !!

va falloir que j'arrète le bricolage php et que je m'y mette un peu plus sérieusement :)

bon en tout cas merci à vous j'ai fait un petit pas dans la logique php/mysql

je vais maintenant continuer à me documenter et développer tout seul les bonnes infos que vous m'avez tous donné ;)

de savoir qu'il y a toujours meilleur que soi, ça fout les boules, mais c'est tellement rassurant par moment :D

EDIT

et voilà grâce à vous mon super code qui prend plus que 8 lignes
$sql = "SELECT count( * ) , id_joueur FROM participe GROUP BY id_joueur ORDER BY `count( * )` DESC";
$result = mysql_query ($sql, $connexion);
while($var = mysql_fetch_array($result))
{
 echo $var['count( * )'];
 echo $var['id_joueur']; 
 echo "</br>";  
 }
me reste plus qu'à faire correspondre id_joueur avec le pseudo, mais ça c'est finger in ze nose :)

questions qui n'ont rien à voir ou presque, vous êtes arrivés à ce niveau comment ? écoles ? bouquins? sites comme php france ?

parce que j'aimerai vraiment avoir de meilleures bases et avoir un bon support, acheter un bouquin sur le php c'est con? y'en a des meilleurs que d'autres ?

Eléphant du PHP | 73 Messages

12 févr. 2008, 17:53

Le SQL permet quelques raccourcis :
<?php
$sql = "SELECT count(*) AS nb, id_joueur FROM participe GROUP BY id_joueur ORDER BY 1 DESC";
$result = mysql_query($sql, $connexion);
while($var = mysql_fetch_array($result)) {
  echo "{$var['nb']}...{$var['id_joueur']}<br/>";
}
?>
* AS nb permet de renommer un champ juste le temps de la requête
* Le ORDER BY peut prendre un numéro d'ordre de champ, ici 1 pour le champ nb
* Enfin, pourquoi faire 3 echo en PHP ?

Attention à la balise BR le slash se met aprés pour la notation xHTML.[/list]
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 17:56

Juste pour approfondir, mais
echo "{$var['nb']}...{$var['id_joueur']}<br/>"; 
peut être avantageusement remplacé par
echo $var['nb'].'....'$var['id_joueur'].'<br/>';
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 73 Messages

12 févr. 2008, 18:02

Pourquoi avantageusement Zeus ? Je suis sceptique !
echo $var['nb'].'...'.$var['id_joueur'].'<br/>';
En quoi la concaténation est plus avantageuse que la substitution par le moteur PHP ?

:?:
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

ViPHP
AB
ViPHP | 5818 Messages

12 févr. 2008, 18:26

Pourquoi avantageusement Zeus ? Je suis sceptique !
echo $var['nb'].'...'.$var['id_joueur'].'<br/>';
En quoi la concaténation est plus avantageuse que la substitution par le moteur PHP ?

:?:

D'une part c'est plus lisible, d'autre part on peut supposer que le moteur aura moins de travail à faire.
Maintenant j'ai pas fait de bench non plus. Faudrait voir :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 18:37

en utilisant ' au lieu de ", PHP ne parse pas le contenu des chaines, donc du temps d'exécution en mois.

De plus, comme AB l'a souligné, c'est plus lisible ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 févr. 2008, 19:10

PHP ne parse pas le contenu des chaines, donc du temps d'exécution en mois
Petite correction : c'est du temps de compilation en moins. Ça veut dire que si cette chaîne est dans une boucle "for" de 1000 itérations, le gain est de 1, pas 1000. Ça veut aussi dire que si vous utilisez un cache comme APC ou eAccelerator, il n'y a pas de différence entre les deux, puisque la compilation n'est effectuée qu'une fois pour toute la vie du script*

* ou en tout cas suffisamment rarement pour être négligible

Eléphant du PHP | 73 Messages

12 févr. 2008, 19:27

Scoop !
Use double quotes to concat more than two strings instead of multiple '.' operators. PHP is forced to re-concatenate with every '.' operator.
>> Utilisez des guillemets pour concatener plus de 2 chaines à la place de multiple opérateur de concaténation. PHP est forcé de reconcatener à chaque "." rencontré.

Source : http://www.php.net/manual/fr/language.o ... string.php
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Petit nouveau ! | 8 Messages

12 févr. 2008, 19:35

Le SQL permet quelques raccourcis :
<?php
$sql = "SELECT count(*) AS nb, id_joueur FROM participe GROUP BY id_joueur ORDER BY 1 DESC";
$result = mysql_query($sql, $connexion);
while($var = mysql_fetch_array($result)) {
  echo "{$var['nb']}...{$var['id_joueur']}<br/>";
}
?>
* AS nb permet de renommer un champ juste le temps de la requête
* Le ORDER BY peut prendre un numéro d'ordre de champ, ici 1 pour le champ nb
* Enfin, pourquoi faire 3 echo en PHP ?

Attention à la balise BR le slash se met aprés pour la notation xHTML.[/list]
ah ben niquel je savais pas pour le AS nb

pour les 3 echos c'etait juste le temps du test :) je fait comme toi d'habitude

par contre pourquoi mettre des {} entre les $var ?

pour le reste de votre discussion je ne vais pas intervenir, vous vous doutez pourquoi :)

Eléphant du PHP | 73 Messages

12 févr. 2008, 19:46

Les {} permettent d'augmenter la lisibilité, il se trouve que mon IDE est configuré pour les mettre en valeur automatiquement.
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

ViPHP
ViPHP | 928 Messages

12 févr. 2008, 19:55

Avant d'augmenter la lisibilité, les {} permettent d'être sur qu'on va bien parser une variable dans une string " ".

Par exemple dans certains cas c'est obligatoire :
$str = "Ma valeur en post : {$_POST['quelquechose']}";

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 20:15

Scoop !
Use double quotes to concat more than two strings instead of multiple '.' operators. PHP is forced to re-concatenate with every '.' operator.
>> Utilisez des guillemets pour concatener plus de 2 chaines à la place de multiple opérateur de concaténation. PHP est forcé de reconcatener à chaque "." rencontré.

Source : http://www.php.net/manual/fr/language.o ... string.php
Je n'ai plus les bench sous la main, mais il s'avère que le 'xxx'.$foo.'xxx' était plus performant que le "xxx$fooxxx".
Par contre, les données s'inversait avec "xxx".$foo."xxx" (normal).

Et je tiens à préciser que nous parlons de poullièmes de microsecondes ... ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 févr. 2008, 23:52

Scoop !
Oui, euh, mais en fait non (ça dépend de la taille des chaînes en question et du nombre de concaténations). Mais comme le disais zeus, c'est de nanosecondes dont on parle, utilise ce qui te parait le plus pratique, la différence ne peut même pas être mesurée en hébergement mutualisé.

Pour la postérité, la forme la plus performante doit être
<?php echo 'str', $var, 'str'; ?>
à égalité avec
str<?php echo $var; ?>str

ViPHP
ViPHP | 2144 Messages

13 févr. 2008, 00:22

me reste plus qu'à faire correspondre id_joueur avec le pseudo, mais ça c'est finger in ze nose :)
Juste au cas où, je ne sais pas si tu sais que tu peux faire une jointure entre tes tables, et récupérer directement le nom du joueur et le nombre de ses match ? Ce qui te permettra d'y parvenir sans ajouter une seule ligne de code.

Petit nouveau ! | 8 Messages

16 févr. 2008, 21:24

ah oui c'est les requetes croisées ?