Optimisation du code PHP

Eléphant du PHP | 169 Messages

14 mars 2007, 18:26

Bonjour, tous le monde

Voici ce que j'essaie de faire :
Création d’un tableau dynamique, ou chaque colonne représentera un mois de l’année
2. Dans chaque colonne, sera affiché tous les evenement qui se dérouleront dans le mois correspondant.
3. Le texte qui sera affiché sera le « Nom de l'evenement »
4. Chaque "Nom d'evenement" sera cliclable pour aller consulter le détail de celui-ci
La page qui affiche ce tableau (index.php) utilise un include pour aller chercher le code (selection_evenement.inc.php) qui vas gérer le rapatriement des infos de la Base de donné....

Voici la syntaxe que j'ai ecrite :
// SELECTIONNER LE CHAMP "evenement_agenda" 
// DE LA TABLE "evenement" 
// LORSQUE LE CHAMP "mois_evenement" 
// EST EGALE A "janvier" 
$janvier = "SELECT * FROM evenement WHERE mois_evenement = 'janvier'";
$janvier_retour =  mysql_query ($janvier);


// SELECTIONNER LE CHAMP "evenement_agenda" 
// DE LA TABLE "evenement" 
// LORSQUE LE CHAMP "mois_evenement" 
// EST EGALE A "fevrier" 
$fevrier= "SELECT * FROM evenement WHERE mois_evenement = 'fevrier'";
$fevrier_retour =  mysql_query ($janvier);

// ainsi de suite jusqu'au mois de décembre
et c'est dans ma page index.php que j'afficherai les infos récolté dans chaque colonne correspondante
while ($janvier = mysql_fetch_array($janvier_retour) )
					{ 
					echo '<a href="detail.php?info='.$janvier['id_evenement'].'">'.$janvier['evenement_agenda'].'</a>';
					echo "<br />";
					echo "<hr noshade=\"noshade\"/>";
					} ?>

MA QUESTION
n'y a t'il pas une autre solution pour écrire la syntaxe qui se trouve dans le fichier selection_evenement.inc.php, pour éviter d'avoir autant de ligne de code ?

Eléphanteau du PHP | 17 Messages

14 mars 2007, 18:45

Je pourrais déjà te conseiller de remplacer ton SELECT * par SELECT id_evenement,evenement_agenda,mois_evenement

Car si jamais tu as d'autres champs, la base de données ira chercher des informations pour rien.


Puis, je te conseillerais aussi d'utiliser mysql_fetch_assoc, plutôt que mysql_fetch_array, car il est plus optimisé.

Si la requete comprend de nombreuses données, par exemple :
mysql_fetch_array va créer a chaque fois deux "clé" pour chaque champs :

01 et id_evenement
02 et evenement_agenda
03 et mois_evenement
etc...

au final le tableau généré par mysql_fetch_array sera 2 fois plus volumineux que celui sorti par mysql_fetch_assoc.


Sinon pour le reste, je n'arrive pas à bien cerné le principe quand tu dis :
j'afficherai les infos récolté dans chaque colonne correspondante

Je pense qu'à partir du moment ou tu récupères tous les mois, le mieux serait de ne générer qu'une seule requete SQL et ensuite de faire un traitement au niveau de l'affichage.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mars 2007, 18:51

Tu peux effectivement ne faire qu'une seule requête te ramenant tous les enregistrements en la triant par mois. Il ne te reste plus ensuite qu'à tester la valeur de mois_evenement en php pour savoir s'il s'agit d'un nouveau mois ou pas :
$sql = "SELECT id_evenement, evenement_agenda, mois_evenement 
  FROM evenement 
  ORDER BY mois_evenement"; // lister les champs, c'est mieux que *
// par ailleurs si tu as un champ date pour le tri, ca sera mieux également :)
$retour =  mysql_query ($sql); 

$mois = ''; // variable temporaire
while($row = mysql_fetch_array($retour)) {
  if($mois != $row['mois_evenement']) { // nouveau mois : affichage du libellé
    echo '<h3>Mois de ' . $row['mois_evenement'] . '</h3>';
    $mois = $row['mois_evenement']; // maj de la variable temp
  }

  // affichage des événement du mois en cours
  echo '<a href="detail.php?info='.$row['id_evenement'].'">'.$row['evenement_agenda'].'</a>'; 
  echo "<br />"; 
  echo "<hr noshade=\"noshade\"/>"; 
}
HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 169 Messages

15 mars 2007, 16:31

Ok, merci pour l'infos !
je comprend mieux maintenant...