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

Langage PHP Discussion :

Comment éviter des requêtes dans une boucle


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut Comment éviter des requêtes dans une boucle
    Bonjour,

    Voilà tout est dans le titre.
    Je suis obligé de l afire plein de fois, ce qui me donne des temps de réponse très très long.
    Notamment pour des tableaux à double entrée (état des vents par exemple)

    Merci d'avance de votre aide.

  2. #2
    Membre chevronné Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Par défaut
    Ben tu fais pas de boucles

    Non, plus sérieusement, pourrais-tu être plus clair, nous montrer ton bout de code sql ... ainsi que ton SGBD.

    Cdlt

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut
    Ok, merci de ton aide, voici un état des ventes :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <table width="99%" cellpadding="0" cellspacing="0" border="1" bordercolor="#999999"  style="empty-cells: show; border-collapse: collapse;">
    <tr class="entete_tableau">
    <td colspan="14" align="center">&Eacute;tat des ventes</td>
    </tr>
     
     
    <tr class="entetecellule">
    <td>Article</td>
    <?php		//Boucle pour lister les mois
    $retour_mois = mysql_query("SELECT nom_mois, id_mois, num_mois FROM mois ORDER BY id_mois");
    $mois = array();
    while ($donnees_mois = mysql_fetch_array($retour_mois)) 
    { 
    $mois[$donnees_mois['id_mois']] = $donnees_mois['num_mois'];?>
    <td width="7%"><?php echo $donnees_mois['nom_mois']; ?></td>
    <?php	} ?>
    <td width="5%">Total</td></tr>
     
    <?php
    $retour_article = mysql_query("SELECT id_article
    FROM article
    WHERE groupe_stat='$famille'
    AND groupe_produit='$sous_famille'
    ORDER BY id_article");
    while ($donnees_article = mysql_fetch_array($retour_article))
    { ?>
    <tr>
    <td align="left">
    <?php echo $donnees_article['id_article']; ?>
    </td>
    <?php	$retour_mois = mysql_query("SELECT nom_mois, id_mois, num_mois FROM mois ORDER BY id_mois");
    	while ($donnees_mois = mysql_fetch_array($retour_mois)) 
    	{ ?>
    	<td>
    <?php	$retour_vente_mois = mysql_query("	SELECT SUM(quantite) AS somme
    FROM commande_detail cd
    JOIN commande c
    ON cd.num_cmde=c.num
    WHERE YEAR(c.date_commande)='$annee_rch'
    AND MONTH(c.date_commande)='".$donnees_mois['num_mois']."'
    AND cd.article='".$donnees_article['id_article']."'
    GROUP BY cd.article, MONTH(c.date_commande)
    ORDER BY cd.article, MONTH(c.date_commande)");
    $donnees_vente_mois = mysql_fetch_array($retour_vente_mois);
    echo $donnees_vente_mois['somme']; ?></td>
    <?php	} ?>
    </tr><?php
    } ?>
     
     
    </table>
    </center>

    En fait je liste les mois, puis les produits, et pour chaque croisement je fais la somme donc si 100 produits alors 12*100 requêtes !
    Voilà, merci d'avance.

  4. #4
    Membre chevronné Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Par défaut
    Heu, c'est clair que c'est très crade ! :S

    Je pense qu'il y a une solution en sql, au lieu de faire 3 appels de requêtes (une pour les mois, une autre pour les articles, et une dernière pour leur combinaison ...), si tu fais une seule requête avec un GROUP BY, ca devrait marcher je crois.

    SELECT ...
    FROM ...
    WHERE ...
    GROUP BY id_mois, id_article

    Je suis un peu rouillé en sql, mais un truc comme ça devrait te permettre d'alléger sérieusement tes temps de réponses ...

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut
    Oui merci, en fait je l'ai déjà fait :

    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
     
     
    $retour_vente_mois = mysql_query("SELECT SUM(quantite) AS somme,article, MONTH(c.date_commande) as mois
    FROM commande_detail cd
    JOIN commande c
    ON cd.num_cmde=c.num
    JOIN article a
    ON cd.article=a.id_article 
    WHERE YEAR(c.date_commande)='$annee_rch'
    GROUP BY article, MONTH(c.date_commande)
    ORDER BY article, MONTH(c.date_commande)");
     
     
    while ($donnees_vente_mois = mysql_fetch_array($retour_vente_mois))
    	{
    	$id_article = $donnees_vente_mois['article'];
    	$somme = $donnees_vente_mois['somme'];
    	$mois = $donnees_vente_mois['mois'];
    	$articles[$id_article][$mois] = $somme;
     
     
    	}
    Le soucis est dans l'affichage des données,

    Comment faire un jolie tableau avec cette reqûete ?

  6. #6
    Membre chevronné Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Par défaut
    Là je t'avoues que c'est une autre paire de manches ...

    Comme ça je ne vois pas trop désolé, il faut s'y pencher sérieusement dessus et là je n'en ai pas le courage dsl ...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Citation Envoyé par dam28800 Voir le message
    Oui merci, en fait je l'ai déjà fait :

    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
     
     
    $retour_vente_mois = mysql_query("SELECT SUM(quantite) AS somme,article, MONTH(c.date_commande) as mois
    FROM commande_detail cd
    JOIN commande c
    ON cd.num_cmde=c.num
    JOIN article a
    ON cd.article=a.id_article 
    WHERE YEAR(c.date_commande)='$annee_rch'
    GROUP BY article, MONTH(c.date_commande)
    ORDER BY article, MONTH(c.date_commande)");
     
     
    while ($donnees_vente_mois = mysql_fetch_array($retour_vente_mois))
    	{
    	$id_article = $donnees_vente_mois['article'];
    	$somme = $donnees_vente_mois['somme'];
    	$mois = $donnees_vente_mois['mois'];
    	$articles[$id_article][$mois] = $somme;
     
     
    	}
    Le soucis est dans l'affichage des données,

    Comment faire un jolie tableau avec cette reqûete ?
    Beh tu fais un tableau et après tu te penche sur l'aspect de celui ci via les css !

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Avec une telle masse d'informations que tu nous fournis, c'est pas gagné.

Discussions similaires

  1. [AJAX - PHP] Lancer des requêtes dans une boucle
    Par Psycadi dans le forum AJAX
    Réponses: 12
    Dernier message: 01/07/2010, 17h05
  2. [MySQL] Comment éviter des doublons dans une liste déroulante ?!
    Par L'anonyme_connu dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/03/2008, 12h14
  3. COmment modifier des valeurs dans une requête?
    Par thibouille dans le forum Bases de données
    Réponses: 20
    Dernier message: 26/02/2008, 17h43
  4. Comment utiliser des variables dans une requête SQL ?
    Par Ragnarok85 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 12/02/2007, 17h23
  5. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 16h24

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