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 :

perdu dans mes requetes imbriquées pour afficher un rapport [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 7
    Par défaut perdu dans mes requetes imbriquées pour afficher un rapport
    bonjour,
    je souhaite afficher les activités commerciales de commerciaux par semaine / année puis par commercial puis par type d'activité.
    exemple :

    semaine 25 / 2012

    jean
    rendez vous (2)
    2012-06-19 - presenatation dossier Fronton TG
    2012-06-19 - présentation dossier présentoir de comptoir.

    relance téléphonique (1)
    2012-06-25 - dossier afrique> relance sur stand

    carine
    rendez vous (3)
    2012-07-02 - Dossier Potence
    2012-07-03 - relancer sur appel d'offre
    2012-07-03 - relance téléphonique suite dossier fronton

    relance téléphonique (2)
    2012-07-09 - en vacances - revient dans 2 semaines
    2012-07-09 - répondeur -> nos bureaux sont actuellement fermés.

    semaine 26 / 2012..... etc

    J'arrive a ce type de résultat, mais cela me parait hyper compliqué. C'est a dire que je fais une requete SQL pour chaque 'catégorie".
    1°) 1ere requete pour obtenir les semaines et années des activités
    2° )puis une seconde requete pour obtenir les commerciaux (que j'ai sous forme de tableau de session :$_SESSION['triCom'])
    3°) puis une troisième requete pour obtenir les types d'activités (que j'ai sous forme de tableau de session :$_SESSION['triType'])

    Cela me parait completement indigeste de faire des requetes de requetes avec des boucles.... N'y aurait il pas plus simple ?

    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
    $sql_date = "
    SELECT 
    	WEEK(activite_date) AS 'semaine',
    	YEAR(activite_date) AS 'année',
    	COUNT(activite_id) AS 'nb activite'
    FROM activites AS ac 
    WHERE $setComActivites
    GROUP BY WEEK(ac.activite_date), YEAR(ac.activite_date)
    ORDER BY YEAR(ac.activite_date), WEEK(ac.activite_date)
    ";
     
    $resultstat = mysql_query($sql_date);
     
    while ($row = mysql_fetch_array($resultstat)) {
     
    	$N = count($_SESSION['triCom']);
    	$N2 = count($_SESSION['triType']);
    		for($i=0; $i < $N; $i++){
    			for ($j=0;$j < $N2; $j++){
     
    			echo "</br>".$row['semaine']." - ".$row['année']."</br>";
     
    			$sql_2 = "SELECT * FROM activites
    			WHERE ( WEEK(activite_date) = ".$row['semaine']." 
    			AND YEAR(activite_date) = ".$row['année']."
    			AND activite_user =	".$_SESSION['triCom'][$i]."
    			AND activite_type = ".$_SESSION['triType'][$j]."
    			)
    			";
     
    			$mysqlQuery = mysql_query($sql_2);
    			while ($row_type = mysql_fetch_array($mysqlQuery)){
    				echo $row_type['activite_date']." - ".$row_type['activite_type']." - ".$row_type['activite_text']." - ".$row_type['activite_user']." </br>";
     
    				}
    			}
    		}
    	}

    merci

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    effectivement a priori tu peux faire ça en une seule requête avec jointure. Tu peux poster le modèle de tes tables (noms de table, noms de colonnes) ?

    (EDIT : En fait, j'ai l'impression que tu n'as qu'une seule table ? Tu peux passer par des variables temporaires, le mieux serait que tu postes le modèle de ta table)

  3. #3
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 7
    Par défaut
    C'est vrai, je n'ai qu'une table. Voici l'export de phpmyadmin:


    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
     
    CREATE TABLE `contacts` (
      `contact_id` int(11) NOT NULL AUTO_INCREMENT,
      `contact_first` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_last` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_title` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_picture` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_information` text CHARACTER SET latin1,
      `contact_tags` text CHARACTER SET latin1,
      `contact_custom` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_company` int(11) DEFAULT NULL,
      `contact_job` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_decideur` tinyint(1) DEFAULT NULL,
      `contact_street2` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_country` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_zip` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_phone` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_cell` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_fax` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_email` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_web` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_user` int(11) DEFAULT NULL,
      `contact_updated` datetime NOT NULL,
      PRIMARY KEY (`contact_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    qui est liée à la table "contact" - "company" - "activites_type" (rendez-vous / prospection / relance) et "users" (le nom des commerciaux)

    en fait, je n'arrive pas a comprendre comment afficher les enregistrements en les séparant dans le listing par "semaine/année" puis "commercial" puis "type d'activité".

    je mets toute la table au cas où
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    CREATE TABLE `activites` (
      `activite_id` int(11) NOT NULL AUTO_INCREMENT,
      `activite_contact` int(11) DEFAULT NULL,
      `activite_company` int(11) DEFAULT NULL,
      `activite_affaire` int(11) NOT NULL,
      `activite_type` int(5) DEFAULT NULL,
      `activite_text` text COLLATE utf8_unicode_ci,
      `activite_date` datetime DEFAULT NULL,
      `activite_user_affect` int(11) DEFAULT NULL,
      `activite_statut` int(11) DEFAULT NULL,
      `activite_user` int(11) DEFAULT NULL,
      PRIMARY KEY (`activite_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `activites_type`
    --
     
    CREATE TABLE `activites_type` (
      `activite_type_id` int(11) NOT NULL AUTO_INCREMENT,
      `activite_type_name` varchar(25) CHARACTER SET latin1 NOT NULL,
      `activite_type_display` int(11) NOT NULL,
      `activite_type_order` int(11) NOT NULL,
      PRIMARY KEY (`activite_type_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `affaires`
    --
     
    CREATE TABLE `affaires` (
      `affaire_id` int(5) NOT NULL AUTO_INCREMENT,
      `affaire_idcontact` int(5) NOT NULL,
      `affaire_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `affaire_montant` decimal(10,2) NOT NULL,
      `affaire_user` int(5) NOT NULL,
      `affaire_date_creation` date NOT NULL,
      `affaire_updated` datetime NOT NULL,
      `affaire_etat` int(1) NOT NULL,
      `affaire_cause_perte` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `affaire_date_livraison` date NOT NULL,
      `affaire_refpk` int(11) NOT NULL,
      `affaire_date_gagne` date NOT NULL,
      `affaire_date_perte` date NOT NULL,
      PRIMARY KEY (`affaire_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `affaires_etat`
    --
     
    CREATE TABLE `affaires_etat` (
      `affaire_etat_id` int(11) NOT NULL AUTO_INCREMENT,
      `affaire_etat_name` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`affaire_etat_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `companies`
    --
     
    CREATE TABLE `companies` (
      `company_id` int(11) NOT NULL AUTO_INCREMENT,
      `company_name` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_adress` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_adress2` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_postalcode` varchar(6) CHARACTER SET latin1 NOT NULL,
      `company_town` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_country` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_phone` varchar(100) CHARACTER SET latin1 NOT NULL,
      `company_picture` varchar(255) CHARACTER SET latin1 NOT NULL,
      `company_information` text CHARACTER SET latin1 NOT NULL,
      `company_user` int(11) NOT NULL,
      `company_updated` datetime NOT NULL,
      PRIMARY KEY (`company_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `contacts`
    --
     
    CREATE TABLE `contacts` (
      `contact_id` int(11) NOT NULL AUTO_INCREMENT,
      `contact_first` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_last` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_title` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_picture` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_information` text CHARACTER SET latin1,
      `contact_tags` text CHARACTER SET latin1,
      `contact_custom` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_company` int(11) DEFAULT NULL,
      `contact_job` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_decideur` tinyint(1) DEFAULT NULL,
      `contact_street2` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_country` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_zip` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_phone` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_cell` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_fax` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_email` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_web` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `contact_user` int(11) DEFAULT NULL,
      `contact_updated` datetime NOT NULL,
      PRIMARY KEY (`contact_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
     
    --
    -- Structure de la table `users`
    --
     
    CREATE TABLE `users` (
      `user_id` int(11) NOT NULL AUTO_INCREMENT,
      `user_level` int(11) DEFAULT NULL,
      `user_email` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `user_password` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      `user_initial` varchar(3) CHARACTER SET latin1 NOT NULL,
      `user_first` varchar(25) CHARACTER SET latin1 NOT NULL,
      `user_last` varchar(25) CHARACTER SET latin1 NOT NULL,
      `user_date` int(10) DEFAULT NULL,
      `user_home` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    Merci

    Bonjour,
    Quel est le principe pour afficher une table par "regroupement".
    Ex : comment afficher une liste de facture triée par année, par mois, par type ?
    2012
    janvier
    01/01/12 - facture n°5 - 2500€
    02/01/12 - facture n°8 - 3500€

    février
    01/02/12 - facture n°2 - 235€

    2013
    janvier
    01/01/13 - facture n° - 632€

    j'arrive bien a avoir la liste regroupée et triée, mais c'est indigeste en lecture.
    Vous passez par des tableaux, des requêtes imbriquées (requête pour 2012, pus requête pour mois, puis requête par date ? )

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux classer les resultats de ta requête avec ORDER BY
    et intercepter le changement de section :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $annee_actuelle = '';
    while ($row = $sth->fetch(PDO:FETHC_ASSOC)) {
      $annee = date('Y', strtotime($row['activite_date']));
      if ($annee != $annee_actuelle) {
          echo '<p>' . $annee . '</p>';
          $annee_actuelle = $annee;
      }
      echo $row['activite_date'] . ' : ' . $row['activite_affaire'] . '<br/>':
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 7
    Par défaut
    merci sabotage..... il faut donc passer par un tableau plutôt que de faire des requêtes imbriquées. Cela réponds à ma question.

  6. #6
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 7
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu peux classer les resultats de ta requête avec ORDER BY
    et intercepter le changement de section :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $annee_actuelle = '';
    while ($row = $sth->fetch(PDO:FETHC_ASSOC)) {
      $annee = date('Y', strtotime($row['activite_date']));
      if ($annee != $annee_actuelle) {
          echo '<p>' . $annee . '</p>';
          $annee_actuelle = $annee;
      }
      echo $row['activite_date'] . ' : ' . $row['activite_affaire'] . '<br/>':
    }
    ah mais oui, c'est bien aussi ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/08/2011, 17h19
  2. Problèmes de calcul dans une requete imbriquée
    Par LeNovice dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/03/2007, 16h56
  3. Faire "remonter" les données dans des requetes imbriquées
    Par Earthwormjim dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/08/2006, 17h37
  4. problème d'apostrophe dans mes requetes
    Par kirian dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/05/2006, 12h06
  5. Réponses: 2
    Dernier message: 22/02/2006, 11h18

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