IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Code plus léger ? - Statistiques mensuelles sur BDD


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut Code plus léger ? - Statistiques mensuelles sur BDD
    Salutations,

    Pour une asso. bénévole que je gère depuis 30 ans, je mets en place régulièrement de nouvelles options dans le Back-Office, dédiées aux bénévoles.

    Des "clients" proposent à notre asso. de récupérer gratuitement leur matériel info. pour leur redonner une seconde vie.
    Les demandes d'enlèvements sont enregistrées dans une BDD MySQLi.

    Pour avoir une vision sur l'avancement des demandes, je développe des petits "plugins", dont, dans le cas présent, un tableau de stats mensuelles.

    Actuellement, le code est TREEEES fastidieux et redondant, et certainement pas optimisé.
    De plus, je suis obligé de mettre à jour le moteur chaque année.
    Mais cela fonctionne.

    Voila des bouts de ce code horrible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    (...)
    	// Requetes SQL
    	// ---------- Mensuels
    	// -------------------- 2015
    	$quinze = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-%'");
    	$quinze01 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-01%'");
    	$quinze02 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-02%'");
    	$quinze03 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-03%'");
    	$quinze04 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-04%'");
    	$quinze05 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-05%'");
    	$quinze06 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-06%'");
    	$quinze07 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-07%'");
    	$quinze08 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-08%'");
    	$quinze09 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-09%'");
    	$quinze10 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-10%'");
    	$quinze11 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-11%'");
    	$quinze12 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2015-12%'");
    	// -------------------- 2016
    	$seize = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2016-%'");
    	$seize01 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2016-01%'");
    	$seize02 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2016-02%'");
    	$seize03 = $connexion->query ("SELECT * FROM $table WHERE `Date` LIKE '2016-03%'");
    (...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (...)
    	// Compter les lignes
    	// -------------------- 2015
    	$deuxmillequinze = $quinze->num_rows;
    	$deuxmillequinze01 = $quinze01->num_rows;
    	$deuxmillequinze02 = $quinze02->num_rows;
    	$deuxmillequinze03 = $quinze03->num_rows;
    	$deuxmillequinze04 = $quinze04->num_rows;
    	$deuxmillequinze05 = $quinze05->num_rows;
    (...)
    (...)
    // -------------------- Totaux mensuels
    $tt01 = $deuxmillequinze01 + $deuxmilleseize01 + $deuxmilledixsept01 + $deuxmilledixhuit01 + $deuxmilledixneuf01 + $deuxmillevingt01;
    $tt02 = $deuxmillequinze02 + $deuxmilleseize02 + $deuxmilledixsept02 + $deuxmilledixhuit02 + $deuxmilledixneuf02 + $deuxmillevingt02;
    $tt03 = $deuxmillequinze03 + $deuxmilleseize03 + $deuxmilledixsept03 + $deuxmilledixhuit03 + $deuxmilledixneuf03 + $deuxmillevingt03;
    $tt04 = $deuxmillequinze04 + $deuxmilleseize04 + $deuxmilledixsept04 + $deuxmilledixhuit04 + $deuxmilledixneuf04 + $deuxmillevingt04;
    (...)
    (...)
    <tr> <!-- 2019 !-->
    <td align="right" bgcolor="#EAEAEA"><strong>2019</strong></td>
    <td align="center"><? echo $deuxmilledixneuf01; ?></td>
    <td align="center"><? echo $deuxmilledixneuf02; ?></td>
    <td align="center"><? echo $deuxmilledixneuf03; ?></td>
    <td align="center"><? echo $deuxmilledixneuf04; ?></td>
    <td align="center"><strong><? echo $deuxmilledixneuf05; ?></strong></td>
    <td align="center"><? echo $deuxmilledixneuf06; ?></td>
    <td align="center"><? echo $deuxmilledixneuf07; ?></td>
    <td align="center"><? echo $deuxmilledixneuf08; ?></td>
    <td align="center"><strong><? echo $deuxmilledixneuf09; ?></strong></td>
    <td align="center"><? echo $deuxmilledixneuf10; ?></td>
    <td align="center"><? echo $deuxmilledixneuf11; ?></td>
    <td align="center"><? echo $deuxmilledixneuf12; ?></td>
    <td align="center"><font color="#FF0000"><? echo $deuxmilledixneuf; ?></font></td>
    </tr>
    (...)
    Comment puis-je optimiser cela ? Je suis sur qu'il existe un moyen magique de concatener ces requêtes en d'autres plus globales.

    Merci de m'avoir lu, et de votre aide ...

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 674
    Par défaut
    Citation Envoyé par Casio Voir le message
    redondant ... moyen magique
    voilà avec ces quelques mots, vous avez tout dit. à partir du moment où vous avez 2 fois (ou parfois 3 fois) ou plus le même code, c'est plus efficace d'utiliser des boucles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $resultats = [];
     
     
    foreach ([2015, 2016, 2017, 2018] as $annee) {
     
    	// préparation de la 2e dimension du tableau qui va stocker les résultats
    	$resultats[$annee] = [];
     
     
    	foreach (["01", "02", "03", "04", "05"] as $mois) {
     
    		$resultats[$annee][] = $connexion->query("SELECT * FROM $table WHERE `Date` LIKE '$annee-$mois-%'");
     
    	}
     
    }
    dans cet exemple, j'ai listé les mois et les années mais là aussi il est possible d'utiliser des boucles pour construire ces tableaux.

    et une fois que vous avez les résultats dans le tableau $resultats il existe plusieurs fonctions qui permettent de lire ces résultats en fonction de vos besoins. regardez là dans la documentation officielle :
    https://www.php.net/manual/fr/language.types.array.php
    https://www.php.net/manual/fr/ref.array.php

  3. #3
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Merci de ce retour,

    je ne vois pas comment implanter ce code ?
    Dois-je définir autre chose auparavant ?
    Je vois que la requête n'arrive qu'a la fin, est-ce normal ?

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 674
    Par défaut
    ce n'est pas vous qui avez fait le code que vous présentez dans le 1er message ?

  5. #5
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Si, mais comme d'habitude, n'étant pas codeur, je fais des suite de raisonnements logiques, en faisant des copiés/collés.

  6. #6
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    J'en suis plus ou moins la, mais je n'arrive pas à trouver les bonnes variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <table align="center" style="border:1px dotted black;" bordercolor="#000000" class="legendes">
    	<tr align="left">
    		<td colspan="14" align="center" bgcolor=#CACACA><font size="+1"><strong>- Statistiques mensuelles -</strong></font></td>
    	</tr>
    	<?php
    	$resultats = [];
     
    	foreach ([2015, 2016, 2017, 2018, 2019, 2020, 2021] as $annee) {
     
    		// préparation de la 2e dimension du tableau qui va stocker les résultats
    		$resultats[$annee] = [];
    		echo "<tr>";
     
    		foreach (["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] as $mois) {
     
    			$resultats[$annee][] = $connexion->query("SELECT * FROM $table WHERE `Date` LIKE '$annee-$mois-%'");
    	 		echo "<td align=\"center\">" . $mois . "</td>";
    		}
     
    		echo "</tr>";
    	}
     
    	?>
    </table>

Discussions similaires

  1. Réponses: 22
    Dernier message: 07/05/2018, 16h48
  2. Problème de sécurité sur BDD MSSQL - Ajout de code html dans mes tables
    Par midnighteleven dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 20/04/2015, 09h38
  3. Export Acces->Excel Requette sur bdd oracle
    Par cedrickb dans le forum Access
    Réponses: 2
    Dernier message: 31/12/2004, 14h27
  4. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo