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

  1. #1
    Candidat au 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
    Points : 4
    Points
    4
    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 confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    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 : 316
    Points : 453
    Points
    453
    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
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    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 379
    Points : 19 060
    Points
    19 060
    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.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    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
    Candidat au 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
    Points : 4
    Points
    4
    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
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    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 379
    Points : 19 060
    Points
    19 060
    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.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut
    ok je teste ça ce soir. Merci.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Encore plus simple, si votre version MySQL supporte les fonctions fenêtrées (donc à partir de la V8) :

    select sum(count(*)) OVER() AS NbTot.


    @pensae : c'est bien ce que je soupçonnais. Vu la description de vos tables, il n'y a aucune bonne raison pour avoir fait une table des crustacées et une table des scorpions.
    Les colonnes sont strictement identiques, il faut donc une seule table. Pour savoir si une espèce est à classer dans les myriapodes ou les scorpions, il faut une table des types qui sera en lien avec celle des espèces.
    Ce faisant, les requêtes seront bien plus simples, et surtout, les maintenances également.
    Imaginez les efforts à faire si demain vous voulez également gérer les hyménoptères, les palmipèdes ou tout autre groupe.
    Avec votre modèle, vous devrez créer les nouvelles tables et modifier toutes vos requêtes .
    Avec une table unique, il y aura juste à ajouter les nouvelles lignes dans la table et le tour est joué

    La classification classique des êtres vivants étant Règne > Embranchement > Classe > Ordre > Famille > Genre > Espèce
    il faut rattacher l'espèce au genre, le genre à la famille etc.
    Eventuellement, si un "étage" de la fusée ne vous intéresse pas, vous pouvez le supprimer du modèle (c'est souvent le cas du Genre qui est porteur de très peu d'attributs)

  9. #9
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    @pensae : c'est bien ce que je soupçonnais. Vu la description de vos tables, il n'y a aucune bonne raison pour avoir fait une table des crustacées et une table des scorpions.
    Les colonnes sont strictement identiques, il faut donc une seule table. )
    Je savais que j'allais avoir cette réflexion que je comprends, mais il y a plusieurs données à prendre en compte qui expliquent ceci. Les fiches sont créées si une photo d'un nouvel invertébré est faite, après son identification et si l'espèce en vaut la peine. Après 35 ans de photos, je sais que la base ne contiendra ni poissons, ni mammifères, ni échinodermes, etc. Pour ça il y a Wikipedia. La première base a été faite pour trier les papillons en fonction de critères visuels simples et les autres ne sont là que pour alimenter des pages et faire le tri. Le côté total vient à peine de me sortir du cerveau et il n'a d'intérêt que pour moi-même, la page des totaux ne sera pas référencée. D'autre part, j'ai créé des formulaires permettant de créer, après saisie, à la fois le contenu du code PHP d'une nouvelle fiche et le code à insérer dans la bdd mysql pour la saisie de l'espèce. J'ai donc un formulaire complexe pour les papillons et des formulaires beaucoup plus simples pour les autres, mais chacun d'entre eux sont différents, car chaque groupe a des espèces classées en utilisant des "boites" différentes. Enfin j'ai volontairement simplifié mon exemple de données. Certains groupes se rangeront avec des phylums et sous phylum, etc. alors que pour d'autres ces deux champs ne seront pas utilisés. Il faudrait donc énormément de colonnes (et de champs) et un formulaire de 10 pages pour saisir au final 6-7 données pour chaque espèce. Je préfère 10 bases simples que je comprends qu'une seule base fourre-tout illisible quitte à me prendre la tête pour des totaux qui ne servent à personne. Quand je vois ce qu'arrivent à faire les informaticiens avec des applis capables de reconnaitre une plante ou un chant d'oiseau je me dis que je vais bien trouver un pro qui m'aidera à faire mes foutus totaux, d'où ma présence ici avec mes connaissances proches de 0 en info.

    Deux exemples de ce qu'il faut pour ranger un coléoptère et un cloporte:

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Si vous n'avez aucune connaissance en informatique et en modélisation des bases de données, je ne vais pas vous assommer avec les méthode de modélisation, les formes normales et autres concepts fondamentaux.

    Il faut juste savoir qu'une base bien modélisée, c'est une base dont le contenu est fiable et intègre dont les performances d'accès sont optimisées, dont la maintenance est facilitée et sur lesquelles les requêtes sont plus faciles à réaliser.

    Le fait que certains attributs soient spécifiques à telle ou telle catégorie animale n'empêche en rien, au contraire, de mutualiser dans une table unique les attributs qui leurs sont communs.
    A minima, toute espèce animale comme végétale possède un nom français et un nom latin, une description, peut être un poids moyen, mini, maxi, une taille moyenne, mini, maxi etc.
    Autant d'attributs à mutualiser dans une table unique.

  11. #11
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Si vous n'avez aucune connaissance en informatique et en modélisation des bases de données, je ne vais pas vous assommer avec les méthode de modélisation, les formes normales et autres concepts fondamentaux.

    Il faut juste savoir qu'une base bien modélisée, c'est une base dont le contenu est fiable et intègre dont les performances d'accès sont optimisées, dont la maintenance est facilitée et sur lesquelles les requêtes sont plus faciles à réaliser.
    Merci pour les conseils. J'ai appris l'informatique à une époque où les ordis énormes avaient encore des disquette 5 pouces 1/4 et où les profs galéraient presque autant que les élèves pour expliquer leur matière. Bien des années plus tard parce que mes besoins étaient là j'ai appris tout seul à faire mes deux sites avec du html, xhtml, php etc. Les bdd c'est très récent.

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Le dilemme se trouve entre une table uniquement avec un gros pourcentage de colonnes non renseignées ou bien, une multitude de petites tables.
    Question optimisation des tables, le mieux est de faire une multitude de petites tables.
    Il est possible aussi d'externaliser dans une table supérieure, toutes les colonnes communes à vos petites tables.
    Cela se nomme un héritage.

    Je suis d'accord sur le fait que vous devez hiérarchiser vos espèces par l'intermédiaire d'une table "type".
    Chaque petite table pointera sur la table mère "type" qui ainsi vous renseignera sur sa classification.

    Il y a un minimum à faire pour modéliser votre base de données.
    Comme le dit Escartefigue, une bonne modélisation va vous simplifier la vie, surtout en terme d'accès et de performance.

    Pour vos totaux, je suis parti de l'idée que vous désiriez faire un tableau récapitulatif.
    Chaque table aura son total, à partir d'une sous-requête dans un select.
    Comme je l'ai dit, un seul résultat par sous-requête.
    Puis au niveau du select, vous pouvez faire vos additions, vos pourcentages, si cela est nécessaire.

    Il existe plusieurs façons de résoudre ce problème des totaux.
    Une autre, peut-être plus simple, est de créer une vue.
    Ainsi vous aurez l'impression d'avoir une table avec un identifiant et des sous-totaux.
    Il vous suffira de faire de la présentation et des calculs pour obtenir un tableau récapitulatif.
    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
    135
    136
    137
    138
    139
    140
    --------------
    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,
       `class`  smallint unsigned NOT NULL,
       `type`   varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_cs`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `TestOne` (`class`,`type`) values
      (1,'Papilio machaon'),
      (2,'Gonepteryx rhamni'),
      (1,'Aglais urticae')
    --------------
     
    --------------
    select * from `TestOne`
    --------------
     
    +----+-------+-------------------+
    | id | class | type              |
    +----+-------+-------------------+
    |  1 |     1 | Papilio machaon   |
    |  2 |     2 | Gonepteryx rhamni |
    |  3 |     1 | Aglais urticae    |
    +----+-------+-------------------+
    --------------
    DROP TABLE IF EXISTS `TestTwo`
    --------------
     
    --------------
    CREATE TABLE `TestTwo`
    (  `id`     integer  unsigned NOT NULL auto_increment primary key,
       `class`  smallint unsigned NOT NULL,
       `type`   varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_cs`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `TestTwo` (`class`,`type`) values
      (1,'BUTHIDÉS'),
      (2,'CHAERILIDÉS')
    --------------
     
    --------------
    select * from `TestTwo`
    --------------
     
    +----+-------+-------------+
    | id | class | type        |
    +----+-------+-------------+
    |  1 |     1 | BUTHIDÉS    |
    |  2 |     2 | CHAERILIDÉS |
    +----+-------+-------------+
    --------------
    drop view if exists `totaux`
    --------------
     
    --------------
    create view `totaux` (`Origin`,`Class`,`Total`) as
      select 'TestOne'    as Origin,
             'Myriapodes' as class,
             count(*)     as Total
        from `TestOne`
       where class=1
    union
      select 'TestOne'    as Origin,
             'Crustaces'  as class,
             count(*)     as Total
        from `TestOne`
        where class=2
    union
      select 'TestOne'    as Origin,
             'Total'      as class,
             count(*)     as Total
        from `TestOne`
    union
      select 'TestTwo'    as Origin,
             'Scorpion'   as class,
             count(*)     as Total
        from `TestTwo`
       where class=1
    union
      select 'TestTwo'    as Origin,
             'Autres'     as class,
             count(*)     as Total
        from `TestTwo`
       where class=2
    union
      select 'TestTwo'    as Origin,
             'Total'      as class,
             count(*)     as Total
         from `TestTwo`
    --------------
     
    --------------
    select * from `totaux`
    --------------
     
    +---------+------------+-------+
    | Origin  | Class      | Total |
    +---------+------------+-------+
    | TestOne | Myriapodes |     2 |
    | TestOne | Crustaces  |     1 |
    | TestOne | Total      |     3 |
    | TestTwo | Scorpion   |     1 |
    | TestTwo | Autres     |     1 |
    | TestTwo | Total      |     2 |
    +---------+------------+-------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  13. #13
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut
    Merci à vous deux, j'ai adapté le tout et ça marche avec ces lignes :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $requete = $bdd->query('SELECT t1.total AS Total_myriapodes_crustaces, t2.total AS Total_scorpions, t1.total+t2.total AS Total_General
     
    from ( SELECT sum(nb) AS total from `myriapodes_crustaces`) AS t1
     
    cross join ( SELECT sum(nb) AS total from `scorpions`) AS t2');
     
    while ($donnees_generales = $requete->fetch())
    {
    echo '<li>Myriapodes, crustacés + scorpions= '; 
    echo $donnees_generales['Total_General']; 
    echo ' espèces</strong></li>';
    }
    J'ai remplacé les count(*) par des sum(nb) car je ne voulais prendre en compte que les nb = 1 sinon le nombre d'espèces n'était pas bon pour certains groupes. Encore une fois un grand MERCi !

    Juste une petite chose, si je vire le while ($donnees_generales = $requete->fetch()) et les {} ça ne marche pas.

+ 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