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

  1. #41
    Membre expérimenté

    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
    Points : 1 357
    Points
    1 357
    Par défaut
    Aussi bizarre que ça puisse paraître, je n'ai jamais eu à faire ce genre de requête. J'ai une vague idée sur la question, mais c'est tout.
    Envoie les requêtes de création des 2 tables, ainsi que quelques lignes de chacune d'elles. Je vais essayer. Je serai un peu plus intelligent ce soir.

  2. #42
    Membre du Club
    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
    Points : 69
    Points
    69
    Par défaut
    Alors la requête :

    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
     
    	$sql = mysql_query("			SELECT u.nom_util, u.prenom_util, COUNT(*) as nb_report, nom_mois, id_mois
    									FROM utilisateur u
    									LEFT JOIN report_tete rt
    									ON u.id_util=rt.id_util
    									LEFT JOIN mois m
    									ON m.num_mois=MONTH(rt.date_visite) 
    									WHERE u.droit_util='1'
    									GROUP BY u.id_util, MONTH(rt.date_visite) ");
     
    	while ($item = mysql_fetch_array($sql))
    		{ 
    		 if (! isset($ligneTableau[$item['nom_util']]))
          		{
            	$ligneTableau[$item['nom_util']] = $ligneModele;
          		}
          	$ligneTableau[$item['nom_util']][$item['id_mois']] = $item['nb_report'];
        	}  
     
    	$i=2; 
        foreach ($ligneTableau as $cle => $valeur)
        	{
    		if($i == '2') { $i=0; $couleur = 'bgcolor="#DBDBDB"'; }	else { $couleur = ''; } $i++;
    		$ligneTableau[$cle][sizeof($ligneTableau[$cle])] = array_sum($ligneTableau[$cle]);
    		$tableau[] = '<tr '.$couleur.'>' . "\n" . '<td style="border-right: 1px solid  #000000; text-align: left;">' . $cle . '</td>' . "\n" . '<td style="border-right: 1px solid  #000000; text-align: center;">' . implode('</td>' . "\n" . '<td style="border-right: 1px solid  #000000; text-align: center;">', $ligneTableau[$cle]) . '</td>' . "\n" . '</tr>' . "\n";
    		}
    En fait c'est ta page de code pour mon tableau à double entrée.

    Ma table report tete contenant les visites :

    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
    CREATE TABLE `report_tete` (
      `id_report` smallint(5) unsigned NOT NULL auto_increment,
      `id_util` tinyint(3) unsigned NOT NULL default '0',
      `id_mag` smallint(5) unsigned NOT NULL default '0',
      `date_visite` date NOT NULL default '0000-00-00',
      `semaine` tinyint(3) unsigned NOT NULL default '0',
      `date_saisie` date NOT NULL default '0000-00-00',
      `heure_saisie` time NOT NULL default '00:00:00',
      `etat` char(1) NOT NULL default '',
      PRIMARY KEY  (`id_report`),
      KEY `id_util` (`id_util`),
      KEY `id_mag` (`id_mag`),
      KEY `etat` (`etat`),
      KEY `date_visite` (`date_visite`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1909 ;
     
    -- 
    -- Contenu de la table `report_tete`
    -- 
     
    INSERT INTO `report_tete` VALUES (1, 6, 509, '2008-05-26', 22, '2008-05-26', '18:20:48', 'C');
    INSERT INTO `report_tete` VALUES (3, 6, 1147, '2008-05-26', 22, '2008-05-26', '18:49:11', 'D');
    INSERT INTO `report_tete` VALUES (4, 6, 508, '2008-05-26', 22, '2008-05-26', '19:15:00', 'C');
    INSERT INTO `report_tete` VALUES (5, 6, 1146, '2008-05-26', 22, '2008-05-26', '19:39:10', 'C');
    INSERT INTO `report_tete` VALUES (6, 6, 734, '2008-05-26', 22, '2008-05-26', '19:48:34', 'C');
    INSERT INTO `report_tete` VALUES (7, 4, 451, '2008-05-26', 22, '2008-05-26', '20:18:28', 'D');
    INSERT INTO `report_tete` VALUES (8, 4, 1981, '2008-05-26', 22, '2008-05-26', '21:01:10', 'D');
    INSERT INTO `report_tete` VALUES (9, 4, 450, '2008-05-26', 22, '2008-05-26', '21:21:14', 'D');
    INSERT INTO `report_tete` VALUES (10, 4, 1064, '2008-05-26', 22, '2008-05-26', '21:43:37', 'D');
    INSERT INTO `report_tete` VALUES (11, 4, 845, '2008-05-26', 22, '2008-05-26', '22:15:15', 'D');
    Ma table des mois :

    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
    CREATE TABLE `mois` (
      `id_mois` tinyint(4) NOT NULL auto_increment,
      `nom_mois` tinytext NOT NULL,
      `num_mois` char(2) NOT NULL default '',
      PRIMARY KEY  (`id_mois`),
      KEY `num_mois` (`num_mois`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
     
    -- 
    -- Contenu de la table `mois`
    -- 
     
    INSERT INTO `mois` VALUES (1, 'Janvier', '01');
    INSERT INTO `mois` VALUES (2, 'Février', '02');
    INSERT INTO `mois` VALUES (3, 'Mars', '03');
    INSERT INTO `mois` VALUES (4, 'Avril', '04');
    INSERT INTO `mois` VALUES (5, 'Mai', '05');
    INSERT INTO `mois` VALUES (6, 'Juin', '06');
    INSERT INTO `mois` VALUES (7, 'Juillet', '07');
    INSERT INTO `mois` VALUES (8, 'Août', '08');
    INSERT INTO `mois` VALUES (9, 'Septembre', '09');
    INSERT INTO `mois` VALUES (10, 'Octobre', '10');
    INSERT INTO `mois` VALUES (11, 'Novembre', '11');
    INSERT INTO `mois` VALUES (12, 'Décembre', '12');
    Ma table utilisateur :
    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
    CREATE TABLE `utilisateur` (
      `id_util` tinyint(11) NOT NULL auto_increment,
      `login_util` tinytext NOT NULL,
      `mdp_util` tinytext NOT NULL,
      `nom_util` tinytext NOT NULL,
      `prenom_util` tinytext NOT NULL,
      `secteur_util` tinytext NOT NULL,
      `droit_util` tinyint(3) unsigned NOT NULL default '0',
      `mail_util` tinytext NOT NULL,
      `tel_util` tinytext NOT NULL,
      PRIMARY KEY  (`id_util`),
      KEY `id_util` (`id_util`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
     
    -- 
    -- Contenu de la table `utilisateur`
    -- 
     
    INSERT INTO `utilisateur` VALUES (1, 'toto', 'toto', 'Toto', 'toto', 'ADMIN', 3, 'informatique@toto.com', '');
    Merci d'avance !

  3. #43
    Membre expérimenté

    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
    Points : 1 357
    Points
    1 357
    Par défaut
    Je relis ta question, et je m'aperçois que j'ai regardé trop vite.
    Saurais tu comment faire pour faire ressortir la valeur la plus élevée de chaque ligne ?
    Précise quelle valeur plus élevée ?

  4. #44
    Membre du Club
    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
    Points : 69
    Points
    69
    Par défaut
    La valeur la plus élevée pour chaque ligne de mon tableau.

    En fait je liste en lignes les utilisateurs et en colonne les mois.
    Je souhaite savoir pour un utilisateur quel est le mois ou il a fait le plus de visite.


    Merci d'avance !

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, 16h05
  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, 11h14
  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, 16h43
  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, 16h23
  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, 15h24

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