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 :

Requête complexe sur 2 tables


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
    Photographe
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Par défaut Requête complexe sur 2 tables
    Bonsoir à tous !

    Alors voici ce que j'ai :
    2 tables
    la première :
    n_cat : id, name
    la deuxième :
    news : id, title, image, cat, ...

    le cat de news correspond a l'id de n_cat.

    Mon besoin :
    Compter pour chaque catégorie il y en a 5 le nombre de news associées (sachant que j'ai besoin de retourner un 0 si une catégorie n'a aucune news associée)

    J'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT c.id,c.name,count(*) as nb FROM news as n,n_cat as c WHERE n.n_cat = c.id GROUP BY c.id
    Ca me retourne un tabeau mais avec seulement les catégories pour lesquelles une news au moins se trouve associée.

    Voilà voilà, si quelqu'un peut m'aider

  2. #2
    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 917
    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 917
    Par défaut
    Salut Rodyh13.

    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
    141
    142
    143
    144
    145
    146
    147
    148
    149
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `n_cat`
    --------------
     
    --------------
    CREATE TABLE `n_cat`
    ( `id`    integer unsigned not null auto_increment primary key,
      `name`  varchar(255)     not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `n_cat` (`name`) values
      ('un'),('deux'),('trois'),('quatre'),('cinq')
    --------------
     
    --------------
    select * from n_cat
    --------------
     
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | un     |
    |  2 | deux   |
    |  3 | trois  |
    |  4 | quatre |
    |  5 | cinq   |
    +----+--------+
    --------------
    DROP TABLE IF EXISTS `news`
    --------------
     
    --------------
    CREATE TABLE `news`
    ( `id`     integer unsigned not null auto_increment primary key,
      `title`  varchar(255)     not null,
      `image`  varchar(255)     not null,
      `cat`    integer unsigned not null,
      CONSTRAINT `FK_NEWS_CAT`  FOREIGN KEY (`cat`) REFERENCES `n_cat` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `news` (`title`,`image`,`cat`) values
      ('titre 01', 'image 01', 1),
      ('titre 02', 'image 02', 5),
      ('titre 03', 'image 03', 1),
      ('titre 04', 'image 04', 3),
      ('titre 05', 'image 05', 1),
      ('titre 06', 'image 06', 3),
      ('titre 07', 'image 07', 5),
      ('titre 08', 'image 08', 3),
      ('titre 09', 'image 09', 5),
      ('titre 10', 'image 10', 1)
    --------------
     
    --------------
    select * from news
    --------------
     
    +----+----------+----------+-----+
    | id | title    | image    | cat |
    +----+----------+----------+-----+
    |  1 | titre 01 | image 01 |   1 |
    |  2 | titre 02 | image 02 |   5 |
    |  3 | titre 03 | image 03 |   1 |
    |  4 | titre 04 | image 04 |   3 |
    |  5 | titre 05 | image 05 |   1 |
    |  6 | titre 06 | image 06 |   3 |
    |  7 | titre 07 | image 07 |   5 |
    |  8 | titre 08 | image 08 |   3 |
    |  9 | titre 09 | image 09 |   5 |
    | 10 | titre 10 | image 10 |   1 |
    +----+----------+----------+-----+
    --------------
    select           *
               from  n_cat  as t1
     
    left outer join  news   as t2
                 on  t2.cat = t1.id
    --------------
     
    +----+--------+------+----------+----------+------+
    | id | name   | id   | title    | image    | cat  |
    +----+--------+------+----------+----------+------+
    |  1 | un     |    1 | titre 01 | image 01 |    1 |
    |  1 | un     |    3 | titre 03 | image 03 |    1 |
    |  1 | un     |    5 | titre 05 | image 05 |    1 |
    |  1 | un     |   10 | titre 10 | image 10 |    1 |
    |  2 | deux   | NULL | NULL     | NULL     | NULL |
    |  3 | trois  |    4 | titre 04 | image 04 |    3 |
    |  3 | trois  |    6 | titre 06 | image 06 |    3 |
    |  3 | trois  |    8 | titre 08 | image 08 |    3 |
    |  4 | quatre | NULL | NULL     | NULL     | NULL |
    |  5 | cinq   |    2 | titre 02 | image 02 |    5 |
    |  5 | cinq   |    7 | titre 07 | image 07 |    5 |
    |  5 | cinq   |    9 | titre 09 | image 09 |    5 |
    +----+--------+------+----------+----------+------+
    --------------
    select           t1.id, coalesce(count(t2.cat), 0) as qte
               from  n_cat  as t1
     
    left outer join  news   as t2
                 on  t2.cat = t1.id
     
           group by  t1.id
    --------------
     
    +----+-----+
    | id | qte |
    +----+-----+
    |  1 |   4 |
    |  2 |   0 |
    |  3 |   3 |
    |  4 |   0 |
    |  5 |   3 |
    +----+-----+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    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 636
    Billets dans le blog
    10
    Par défaut Apprendre les fondamentaux
    Bonjour,

    Parler de requête complexe pour ce cas précis, est symptomatique d'un besoin avéré d'apprentissage des bases du SQL

    Les différents types de jointures sont abordés ici par exemple :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Et le SQL en général peut être vu là :
    http://www.developpez.net/forums/d68...q-langage-sql/

    bonne lecture

  4. #4
    Membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Parler de requête complexe pour ce cas précis, est symptomatique d'un besoin avéré d'apprentissage des bases du SQL

    Les différents types de jointures sont abordés ici par exemple :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Et le SQL en général peut être vu là :
    http://www.developpez.net/forums/d68...q-langage-sql/

    bonne lecture
    Oui désolé je suis photographe. Mais j'ai des bases en php, mysql, je pouvais réussir ça en faisant plein de requêtes, etc, etc mais je voulais avoir un code si possible pas trop crade, c'est pour ça que je demande de l'aide, malheureusement j'ai pas trop le temps de vraiment apprendre car ce n'est pas mon métier ni finalement une passion dans le sens ou j'ai beaucoup d'autres choses à faire.

    Mais merci, j'avoue que je ne gère pas du tout, et je vais essayer de lire les liens que tu m'as envoyé !

    Merci.

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

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Par défaut
    WOW !

    Merci beaucoup !

    Par contre comment je pourrais récupérer en plus le nom de la catégorie ?

    plutôt que d'avoir un tableau qui contient id et qte, je pourrais avoir soit :
    un tableau avec name et qte
    ou peut etre c'est encore mieux, un tableau avec id, name, qte

    ??

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

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Par défaut
    Citation Envoyé par Rodyh13 Voir le message
    WOW !

    Merci beaucoup !

    Par contre comment je pourrais récupérer en plus le nom de la catégorie ?

    plutôt que d'avoir un tableau qui contient id et qte, je pourrais avoir soit :
    un tableau avec name et qte
    ou peut etre c'est encore mieux, un tableau avec id, name, qte

    ??

    C'est bon j'ai réfléchis avec mon petit cerveau j'ai trouvé comme un grand.

    Sorry

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    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 636
    Billets dans le blog
    10
    Par défaut
    Alors c'est parfait car on retient souvent mieux quand on a cherché par soi même

  8. #8
    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 917
    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 917
    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
    --------------
    select           t1.id, t1.name, coalesce(count(t2.cat), 0) as qte
               from  n_cat  as t1
     
    left outer join  news   as t2
                 on  t2.cat = t1.id
     
           group by  t1.id, t1.name
    --------------
     
    +----+--------+-----+
    | id | name   | qte |
    +----+--------+-----+
    |  1 | un     |   4 |
    |  2 | deux   |   0 |
    |  3 | trois  |   3 |
    |  4 | quatre |   0 |
    |  5 | cinq   |   3 |
    +----+--------+-----+
    @+

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

Discussions similaires

  1. [MySQL] Requête SQL complexe sur trois tables
    Par NET_Nicolas dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/08/2011, 18h24
  2. [SQL] Requête complexe sur plusieurs tables
    Par BFH dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/09/2007, 16h21
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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