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 :

J'ai du mal avec cette requete 'simple'


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut J'ai du mal avec cette requete 'simple'
    Bonjour ,

    Pour résumer en donnant un max d'info,

    J'ai 2 tables (+table category) :

    collectionPhotos :
    id_collection
    collection
    id_category
    Donne :
    1 La Jeanne 1
    2 Saint Michel 3
    3 Mustang GT 6
    4 Zanzibar 2
    5 L.A. 2
    ...
    et une autre table

    photos :
    id_photo
    id_collection
    timbre
    image1
    image2
    Donne :
    1 1 timbreimage1.jpg surlepontmoyen.jpg surlepontgrand.jpg
    2 1 timbreimage2.jpg surlequai.jpg surlequoigrand.jpg
    3 2 timbreMontMimi.jpg montmoyen.jpg montgrand.jpg
    4 3 timbreFord.jpg fordml.jpg fordXL.jpg
    5 1 timbreJeanneloin.jpg jeanneLm.jpg jeanneL.jpg
    je voudrais lancer une requete pour afficher le nombre de photo disponibles pour chaque collection comme ceci :

    id_collection collection category NBphotos
    1 La Jeanne 1 3
    2 SaintMichel 3 1
    3 MustangGT 6 1
    4 Zanzibar 2 0
    5 L.A. 2 0
    ...
    j'affiche 0 si pas de photos.

    Merci de votre aide !

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    as tu essayé quelque chose? ou bloques tu?
    tu as besoin de faire une jointure externe entre tes tables et compter le nombre de photos

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Salut,
    En fait je ne sais pas faire les jointures et je ne suis pas un pro de la syntaxe MySQL. Je te remercie pour ta réponse et de ton aide si tu peux faire qlq. chose.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    peut être ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select c.id_collection, IFNULL(count(p.id_photo),0) 
    FROM collectionPhotos c
    LEFT JOIN  photos p ON p.id_collection = c.id_collection
    GROUP BY c.id_collection

  5. #5
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    La table photos n'est pas en formes normales, les colonnes image1 et image2 constituent deux informations scalaires sans aucune dépendance fonctionnelle directe entre elles qui devraient nécessiter de se retrouver, chacune, dans une ligne distincte de la table.
    Quant à la proposition d'Eugène (ionesco) elle démontre qu'il n'a pas bien compris comment SQL gère les colonnes d'absence de valeur NULL.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    justement je pensais que le count renvoi NULL ce serait remplacé par 0 et que la ligne serait retournée.

    J'aimerai comprendre mon erreur, peux-tu m'en dire plus?
    Merci.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT cp.collection, COUNT(p.id_photo) AS NbPhotos
    FROM collectionPhotos AS cp
    LEFT OUTER JOIN photos AS p ON cp.id_collection = p.id_collection
    GROUP BY cp.collection
    ==> Plus d'infos sur les jointures.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    J'ai l'impression que ça ne s'additionne pas (les NBphotos sont tous =1 ?)

    Merci beaucoup de votre aide,

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je viens pourtant de créer les tables :
    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
    CREATE TABLE `collectionPhotos` (
      `id_collection` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `collection` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `id_category` int(10) unsigned NOT NULL,
      PRIMARY KEY (`id_collection`),
      KEY `category` (`id_category`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    CREATE TABLE `photos` (
      `id_photo` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `id_collection` int(10) unsigned NOT NULL,
      `timbre` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `image1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `image2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_photo`),
      KEY `id_collection` (`id_collection`),
      CONSTRAINT `photos_ibfk_1` FOREIGN KEY (`id_collection`) REFERENCES `collectionPhotos` (`id_collection`) ON DELETE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    Et d'exécuter la requête que j'ai donnée plus haut et résultat :
    collection NbPhotos
    L.A. 0
    La Jeanne 3
    Mustang GT 1
    Saint Michel 1
    Zanzibar 0
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Merci XXXXXXXX

    CinePhil : tu as merité ton titre d'ing. (étant moi m ing. '86)

    j'ai reussi a comprendre la logique et c'est grâce a votre aide à tous et plus particulièrement à toi CinePhil. Bravo

    en 2 mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT cp.collection COUNT(p.id_photo) AS NbPhotos
    FROM collection photos AS cp
    LEFT OUTER JOIN photos AS p ON cp.collection = p.id_collection
    GROUP BY cp.collection

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

Discussions similaires

  1. [2008R2] du mal avec une requete (help !)
    Par cana13 dans le forum Développement
    Réponses: 8
    Dernier message: 02/07/2015, 16h26
  2. requete simple avec integer
    Par c+cool dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/08/2009, 23h43
  3. Requete simple mais j'ai du mal
    Par grabriel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/09/2008, 10h51
  4. requete simple avec date
    Par aurelie83 dans le forum SQL
    Réponses: 20
    Dernier message: 05/11/2007, 12h29
  5. Réponses: 3
    Dernier message: 06/06/2007, 18h45

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