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 :

Requête avec GROUP BY [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut Requête avec GROUP BY
    Bonsoir,

    Me revoilà avec une nouvelle question :

    Cette requête fonctionne parfaitement, je peux ainsi imprimer les billets achetés par personne, avec le prix par billet et un total par prix de billet, en sélectionnant la personne dans la page précédente

    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
    SELECT
                    IDNPlace,
    		NumPlace,
    		Reférence,
    		Personnes.IDPersonne,
    		Personnes.Nom_Personne,
    		Personnes.Prenom_Personne,
    		Personnes.Paiement,
    		Personnes.Motet,
    		Instruments.Instrument,
    		Concert.IDconcert,
    		Concert.titreconcert,
    		Concert.lieu,
    		DATE_FORMAT ( Concert.dateconcert, '%d/%m/%Y' ) AS datecon,
    		Zones.IDZone,
    		Zones.Zone,
    		Prix.IDPrix,
    		Prix.Prix,
    		SUM(Prix.Prix) AS prixbillets,
    		COUNT(Prix.Prix) AS nbillets
     
    		FROM Tab_NumPlace
     
    		INNER JOIN Personnes ON Tab_NumPlace.IDPersonne = Personnes.IDPersonne
    		INNER JOIN Instruments ON Personnes.IDInstruments = Instruments.IDInstruments
    		INNER JOIN Concert ON Tab_NumPlace.IDconcert = Concert.IDconcert 
    		INNER JOIN Zones ON Tab_NumPlace.IDZone = Zones.IDZone 
    		INNER JOIN Prix ON Zones.IDPrix = Prix.IDPrix
     
    		WHERE Personnes.IDPersonne = '".$_REQUEST['idmus']."' AND Concert.IDconcert  = '".$_REQUEST['idpm']."'
    		GROUP BY IDPrix
    		ORDER BY IDPrix
    Voici le résultat, par exemple une personne a acheté 3 billets à 10 euro et 2 billets à 5 euro, j'aurai :

    Fred Machin :
    3 billets à 10 euro = 30 euro
    2 billets à 5 euro = 10 euro
    prix total = 40 euro


    J'ai voulu faire la même chose sans être obligée de sélectionner la personne avant de lancer la requête, c'est-à-dire :

    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
    SELECT
                    IDNPlace,
    		NumPlace,
    		Reférence,
    		Personnes.IDPersonne,
    		Personnes.Nom_Personne,
    		Personnes.Prenom_Personne,
    		Personnes.Paiement,
    		Personnes.Motet,
    		Instruments.Instrument,
    		Concert.IDconcert,
    		Concert.titreconcert,
    		Concert.lieu,
    		DATE_FORMAT ( Concert.dateconcert, '%d/%m/%Y' ) AS datecon,
    		Zones.IDZone,
    		Zones.Zone,
    		Prix.IDPrix,
    		Prix.Prix,
    		SUM(Prix.Prix) AS prixbillets,
    		COUNT(Prix.Prix) AS nbillets
     
    		FROM Tab_NumPlace
     
    		INNER JOIN Personnes ON Tab_NumPlace.IDPersonne = Personnes.IDPersonne
    		INNER JOIN Instruments ON Personnes.IDInstruments = Instruments.IDInstruments
    		INNER JOIN Concert ON Tab_NumPlace.IDconcert = Concert.IDconcert 
    		INNER JOIN Zones ON Tab_NumPlace.IDZone = Zones.IDZone 
    		INNER JOIN Prix ON Zones.IDPrix = Prix.IDPrix
     
    		WHERE Concert.IDconcert  = '".$_REQUEST['id']."'
    		GROUP BY IDPrix
    		ORDER BY IDPrix

    et là j'obtiens :

    Fred Machin :
    5 billets à : 10 euro = 50 euro
    2 billets à : 5 euro = 10 euro

    Jo Dupont
    5 Billets à : 40 euro = 200 euro

    Jules Durand :
    3 Billets à : 35 euro = 105 euro

    et

    Amélie Truc qui avait deux billets à 10 euro n'apparait pas, ses deux billets ont passé chez Fred Machin qui lui n'en avait acheté que trois et se retrouve avec 5.

    Je soupconne que le problème vient du GROUP BY, mais après avoir testé d'autres possibilités, celle-ci fonctionnait si bien que j'ai voulu l'appliquer sans être obligée de sélectionner les personnes une à une pour imprimer, mais les imprimer toutes d'un seul coup (surtout qu'il peut y en avoir une centaire)

    Comme d'habitude la solution est certainement toute simple pour les experts et très compliquée pour moi

    Merci d'avance pour votre aide précieuse et bonne semaine à tous

  2. #2
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Ca marche !!!

    Voici ce que j'ai 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    SELECT
            IDNPlace,
    		NumPlace,
    		Reférence,
    		Personnes.IDPersonne,
    		Personnes.Nom_Personne,
    		Personnes.Prenom_Personne,
    		Personnes.Paiement,
    		Personnes.Motet,
    		Instruments.Instrument,
    		Concert.IDconcert,
    		Concert.titreconcert,
    		Concert.lieu,
    		DATE_FORMAT ( Concert.dateconcert, '%d/%m/%Y' ) AS datecon,
    		Zones.IDZone,
    		Zones.Zone,
    		Prix.IDPrix,
    		Prix.Prix,
    		SUM(Prix.Prix) AS prixbillets,
    		COUNT(Prix.Prix) AS nbillets
     
    		FROM Tab_NumPlace
     
    		INNER JOIN Personnes ON Tab_NumPlace.IDPersonne = Personnes.IDPersonne
    		INNER JOIN Instruments ON Personnes.IDInstruments = Instruments.IDInstruments
    		INNER JOIN Concert ON Tab_NumPlace.IDconcert = Concert.IDconcert 
    		INNER JOIN Zones ON Tab_NumPlace.IDZone = Zones.IDZone 
    		INNER JOIN Prix ON Zones.IDPrix = Prix.IDPrix
     
    		WHERE Concert.IDconcert  = '".$_REQUEST['id']."'
    		GROUP BY IDPrix, IDPersonne
    		ORDER BY IDPersonne, IDPrix ");
    Maintenant je dois faire un saut de page dans FPDF pour avoir chaque résultat sur une nouvelle page. Une idée ?

    Je vous dis merci même si j'ai trouvé la solution par moi-même, parfois il suffit d'en parler pour y arriver

    Bonne nuit et bonne semaine

  3. #3
    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 groupes par personne et par prix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY IDPersonne, IDPrix
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Oui merci, je l'ai fait et effectivement cela fonctionne sauf que je me suis aperçue que je n'arrive pas à séparer les groupes, j'obtiens ceci

    Concert du : 05/03/2017 Cxxx Rxxx 40.--
    1 Billets à : 40.-- = 40.--

    Concert du : 05/03/2017 Cxxx Rxxx 105.--
    3 Billets à : 35.-- = 105.--

    Concert du : 05/03/2017 Axxx Axxx 120.--
    3 Billets à : 40.-- = 120.--

    Concert du : 05/03/2017 Bxxx Axxx 40.--
    1 Billets à : 40.-- = 40.--

    Concert du : 05/03/2017 Jxxx Bxxx 10.--
    1 Billets à : 10.-- = 10.--


    et je voudrais :

    Concert du : 05/03/2017 Cxxx Rxxx Total 145.--
    1 Billets à : 40.-- = 40.--
    3 Billets à : 35.-- = 105.--

    Concert du : 05/03/2017 Axxx Axxx Total 120.--
    3 Billets à : 40.-- = 120.--

    Concert du : 05/03/2017 Bxxx Dxxx Total 40.--
    1 Billets à : 40.-- = 40.--

    Concert du : 05/03/2017 Jxxx Bxxx Total 10.--
    1 Billets à : 10.-- = 10.--

    Merci d'avance et bonne nuit

  5. #5
    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
    Comment est ton code PHP pour cet affichage ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Voici le code, c'est FPDF pour pouvoir imprimer :
    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
    <?php
    define("_SYSTEM_TTFONTS", "C:/Windows/Fonts/");
    define('tFPDF_FONTPATH','font/');
    require('tfpdf.php');
     
    require('mysql_table.php');
     
    class PDF extends PDF_MySQL_Table
     
    {
    protected $col = 0; // Colonne courante
    protected $y0;      // Ordonnée du début des colonnes
     
    function Header()
    {
        // En-tête
        global $titre;
     
    }
    }
     
    $pdf=new tFPDF('L','cm','A6');
    $pdf=new tFPDF();
     
    $pdf->AddPage();
     
    $pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
    $pdf->SetFont('DejaVu','',14);
     
    $pdf->SetAutoPageBreak(0,10);
    $pdf->SetLeftMargin(10);
     
    $pdf->SetRightMargin(10);
     
    $pdf->ln(20);
     
    include("include/variables.inc.php");
    $liendb  =  mysql_connect($bddserver,  $bddlogin,  $bddpassword);
    mysql_select_db  ($bdd);
    mysql_set_charset( 'utf8' );
    $id = $_POST['id'];
     
     
    $query=("SELECT
                    IDNPlace,
    		NumPlace,
    		Reférence,
    		Personnes.IDPersonne,
    		Personnes.Nom_Personne,
    		Personnes.Prenom_Personne,
    		Personnes.Paiement,
    		Personnes.Motet,
    		Instruments.Instrument,
    		Concert.IDconcert,
    		Concert.titreconcert,
    		Concert.lieu,
    		DATE_FORMAT ( Concert.dateconcert, '%d/%m/%Y' ) AS datecon,
    		Zones.IDZone,
    		Zones.Zone,
    		Prix.IDPrix,
    		Prix.Prix,
    		SUM(Prix.Prix) AS prixbillets,
    		COUNT(Prix.Prix) AS nbillets
    		
    		FROM Tab_NumPlace
    		
    		INNER JOIN Personnes ON Tab_NumPlace.IDPersonne = Personnes.IDPersonne
    		INNER JOIN Instruments ON Personnes.IDInstruments = Instruments.IDInstruments
    		INNER JOIN Concert ON Tab_NumPlace.IDconcert = Concert.IDconcert 
    		INNER JOIN Zones ON Tab_NumPlace.IDZone = Zones.IDZone 
    		INNER JOIN Prix ON Zones.IDPrix = Prix.IDPrix
    
    		WHERE Concert.IDconcert  = '".$_REQUEST['id']."'
    		GROUP BY IDPersonne, IDPrix
    		ORDER BY IDPersonne, IDPrix ");
     
     
    $resultat=mysql_query($query, $liendb);
     
     
    while($row=mysql_fetch_array($resultat))
    {
    include('include/var.inc.php');
    $pays = ( PHP_OS == "Windows" ) ? 'fra' : 'fr_FR';
    setlocale ( LC_TIME, $pays ) ;
    $pdf->ln();
    $pdf->SetFont('DejaVu','',14);
    	$pdf->cell(3,4,$cdd,2,0,'L'); //date concert, nom, prix total
    	$pdf->ln(6);
    	$pdf->cell(3,4,$baa,2,0,'L'); // nombre de billets à xxx = xxx
     
     
    $pdf->ln();
     
    }
     
    $pdf->Output();
    ?>
    Voilà ...

    Merci d'avance pour votre aide toujours appréciée et précieuse.

  7. #7
    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
    Il sort d'où le $cdd ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Syntaxe d'une requête avec GROUP
    Par gvdmoort dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/10/2006, 15h10
  2. Requête avec Group by sur Oracle 8i
    Par madina dans le forum Oracle
    Réponses: 14
    Dernier message: 16/06/2006, 12h41
  3. requête avec group by...
    Par JerBi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2006, 03h17
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. requête avec group by
    Par Staron dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2004, 16h30

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