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

Requêtes MySQL Discussion :

Total du total de colonnes situées sur des tables différentes


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Total du total de colonnes situées sur des tables différentes
    Bonjour,
    Je commencerai par me présenter rapidement. Je suis un naturaliste passionné par beaucoup de choses et je possède 2 sites internet que j'ai voulu faire moi-même avec ma petite tête et en pompant des idées à droite et à gauche. Je ne suis pas du tout dans l'informatique mais j'essaie d'adapter ce que je trouve sur les forums à mes propres besoins.
    Ayant mis en ligne des fiches sur les petites bestioles j'ai saisi chaque espèce dans une table mysql correspondant à son groupe et j'ai ajouté le nombre 1 dans une colonne nommée nb : la table lepidopteres pour les papillons, coleopteres pour les coléoptères, etc.
    J'arrive à afficher le total des espèces pour chaque groupe séparément en écrivant pour chacun d'eux ceci :

    Code php : 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
    <?php
    $requete = $bdd->query('SELECT sum(nb) AS somme_myriapodes_crutaces FROM `myriapodes_crutaces` WHERE `nb`=1');
     
    while ($donnees_myriapodes_crutaces = $requete->fetch())
    {
    ?>
    <?php echo '<ul><li>Myriapodes et crustacés :'; 
    ?>	
    <?php echo $donnees_myriapodes_crutaces['somme_myriapodes_crutaces']; 
    ?>	
    <?php echo ' espèces</strong></li>'; ?>	
    <?php
    }
    $requete = $bdd->query('SELECT sum(nb) AS somme_scorpions FROM `scorpions` WHERE `nb`=1');
     
    while ($donnees_scorpions = $requete->fetch())
    {
    ?>
    <?php echo '<li>Scorpions :'; 
    ?>	
    <?php echo $donnees_scorpions['somme_scorpions']; 
    ?>	
    <?php echo ' espèces</strong></li>'; ?>	
    <?php
    }

    etc,

    Bon je sais que le pourrais virer quelques <?php ?> mais ce n'est pas ma priorité pour l'instant tant que ça marche.

    Mon besoin serait de pouvoir regrouper le total de toutes les espèces mais je ne trouve pas de solution.

    J'ai testé ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $requete = $bdd->query('SELECT sum(mollusques.nb) + sum(mmyriapodes_crutaces.nb) AS sommetotale FROM `mollusques` WHERE `mollusques.nb`=1 INNER JOIN myriapodes_crutaces ON mollusques.nb = myriapodes_crutaces.nb');
    while ($donnees_totale = $requete->fetch())
    {
    ?>
    <?php echo 'Total :'; 
    ?>	
    <?php echo $donnees_totale['sommetotale']; 
    ?>	
    <?php echo ' espèces</strong>'; ?>	
    <?php
    }

    Mais j'ai l'erreur :
    Fatal error: Uncaught Error: Call to a member function fetch() on bool in /homepages/44/d376364717/htdocs/wsb4715281001/admin_faune/statistiques-invertebres2.php:138
    Stack trace: #0 {main} thrown in /homepages/44/d376364717/htdocs/wsb4715281001/admin_faune/statistiques-invertebres2.php on line 138
    la ligne 138 correspond à while ($donnees_totale = $requete->fetch()).

    Merci de bien vouloir jeter un coup d'œil

  2. #2
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    bonjour,

    pas besoin de faire un while pour récupérer une ligne de résultat, mais visiblement votre requête ne marche pas puisqu'elle renvoit un booléen au lieu d'un PDOStatement.

    la requête fonctionne t-elle en direct?

    ajouter un debug sur PDO pour voir où ça coince.

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 914
    Par défaut
    Salut à tous.

    Citation Envoyé par Pensae
    et j'ai ajouté le nombre 1 dans une colonne nommée nb : la table lepidopteres pour les papillons, coleopteres pour les coléoptères, etc.
    Je ne comprends pas l'utilité de créer une colonne contenant la valeur "1".

    Citation Envoyé par Pensae
    Mon besoin serait de pouvoir regrouper le total de toutes les espèces mais je ne trouve pas de solution.
    Il nous faudrait le descriptif de vos tables afin de mieux cerner votre demande.

    Je vais essayer de répondre à votre question en fonction de ce que j'ai compris de votre problème.
    Vous avez plusieurs tables et vous désirez effectuer un total par table, mais aussi regrouper ces totaux dans une seule requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select t1.total as Total_Myriapodes_Crutaces,
           t2.total as Total_Scorpions
     
    from ( select count(*) as total
             from `myriapodes_crutaces`
         ) as t1
     
    cross join ( select count(*) as total
                     from `scorpions`
                 ) as t2;
    La particularité de cette requête est que chaque sous-requête retourne une seule ligne.

    Cordialement.
    Artemus24.
    @+

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Bonjour

    La bonne démarche pour obtenir une réponse pertinente, c'est de communiquer la structure de vos tables (idéalement le script contenant les ordres SQL "CREATE TABLE"), un extrait du contenu de chaque table entrant en jeu et un exemple de résultat attendu.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Il nous faudrait le descriptif de vos tables afin de mieux cerner votre demande.
    Pour faire simple en restant sur les deux groupes précédents :

    la table myriapodes_crutaces
    comporte les champs :
    id/ nom / genre_espece / classe/ ordre / famille/ lien_vers_la_fiche/ nb
    1/Scolopendre/Scolopendra cingulata/Chilopodes/Scolopendridés/Fiche-espece-scolopendre.php / 1
    2/Iule / Plusieurs espèces/ Diplopodes / Fiche-espece-iule.php / 0 <- l'intérêt du zéro ici est de ne pas comptabiliser cette ligne, la page Fiche-espece-iule.php regroupe 2 espèces d'Iules
    3/Iule méditerranéen / Ommatoiulus sabulosus / Diplopodes / iule-mediterraneen.php / 1
    4/Iule corse/ Ommatoiulus corsica/ Diplopodes / iule-corse.php / 1

    idem pour la table scorpions
    id/ nom / genre_espece / classe/ ordre / famille/ lien_vers_la_fiche/ nb
    1 /Scorpion noir à queue jaune/ Euscorpius flavicaudis / Arachnides / Scorpiones / Euscorpiidés/ Fiche-espece-Scorpion-noir-queue-jaune.php / 1
    2 / Scorpion Languedocien / Buthus occitanus / Arachnides / Scorpiones / Buthidés/Fiche-espece-scorpion-languedocien.php/ 1

    Citation Envoyé par Artemus24 Voir le message
    .
    Je ne comprends pas l'utilité de créer une colonne contenant la valeur "1".
    La colonne contient soit la valeur 1 (cas d'une espèce) soit 0 dans le cas d'un regroupement d'espèces (voir ci-dessus)

    Si on se contente de ces deux groupes j'aimerai avoir le sous-total de chaque groupe (ça je sais faire, ça marche) :
    Myriapodes et crustacées : 3 espèces
    Scorpions : 2 espèces

    Et plus loin le total général :

    Myriapodes et crustacés + Scorpions : 5 espèces
    Et ça je sais pas faire

    L'intérêt d'avoir fait une table par groupe et non une table unique est que certaines tables qui ont en commun au moins les champs précédents sont beaucoup plus complexes par exemple dans le cas des papillons (table lepidopteres) les champs point-aile-anterieure/ couleur_aile_anterieure / queue / taille permettent de trier les espèces afin de les présenter sur des pages : petits papillons oranges / grands papillons avec une queue , etc.

    Voici la bestiole : https://www.animateur-nature.com/pag...-chenilles.php
    Et la page des totaux : https://www.animateur-nature.com/adm...nvertebres.php

    Merci.

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 914
    Par défaut
    Salut à tous.

    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    set session collation_connection = "latin1_general_ci"
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_cs`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `TestOne`
    --------------
     
    --------------
    CREATE TABLE `TestOne`
    (  `id`    integer unsigned NOT NULL auto_increment primary key,
       `type`  varchar(255)         NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_cs`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `TestOne` (`type`) values
      ('Papilio machaon'),
      ('Gonepteryx rhamni'),
      ('Aglais urticae')
    --------------
     
    --------------
    select * from `TestOne`
    --------------
     
    +----+-------------------+
    | id | type              |
    +----+-------------------+
    |  1 | Papilio machaon   |
    |  2 | Gonepteryx rhamni |
    |  3 | Aglais urticae    |
    +----+-------------------+
    --------------
    DROP TABLE IF EXISTS `TestTwo`
    --------------
     
    --------------
    CREATE TABLE `TestTwo`
    (  `id`    integer unsigned NOT NULL auto_increment primary key,
       `type`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_cs`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `TestTwo` (`type`) values
      ('BUTHIDÉS'),
      ('CHAERILIDÉS')
    --------------
     
    --------------
    select * from `TestTwo`
    --------------
     
    +----+-------------+
    | id | type        |
    +----+-------------+
    |  1 | BUTHIDÉS    |
    |  2 | CHAERILIDÉS |
    +----+-------------+
    --------------
    select t1.total          as Total_Myriapodes_Crutaces,
           t2.total          as Total_Scorpions,
           t1.total+t2.total as Total_General
     
    from ( select count(*) as total
             from `TestOne`
         ) as t1
     
    cross join ( select count(*) as total
                     from `TestTwo`
               ) as t2
    --------------
     
    +---------------------------+-----------------+---------------+
    | Total_Myriapodes_Crutaces | Total_Scorpions | Total_General |
    +---------------------------+-----------------+---------------+
    |                         3 |               2 |             5 |
    +---------------------------+-----------------+---------------+
    --------------
    COMMIT
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Cordialement.
    Artemus24.
    @+

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    ok je teste ça ce soir. Merci.

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

Discussions similaires

  1. Fusionner deux requêtes sur des tables différentes
    Par PhilLU dans le forum Requêtes
    Réponses: 6
    Dernier message: 27/03/2017, 13h45
  2. Proc freq sur des tables différentes
    Par cococmoi dans le forum SAS Base
    Réponses: 4
    Dernier message: 22/10/2013, 11h44
  3. Proc freq sur des tables différentes
    Par cococmoi dans le forum SAS Base
    Réponses: 4
    Dernier message: 15/05/2013, 12h34
  4. Réponses: 2
    Dernier message: 25/01/2012, 17h57
  5. Réponses: 2
    Dernier message: 08/06/2011, 17h25

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