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

Discussion :

problème pour faire une requête


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    novembre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut problème pour faire une requête
    Bonjour, j'ai un soucis pour faire une requête :
    J'ai 3 tables :

    - une table "annonce" (champs : idan, idmoto, datean...) où je stocke les petites annonces et leur date de publication(datean)
    - une table "moto" (champs : idmoto, nommoto, dateenvoi) où je stocke les categories de motos ainsi que la date d'envoi de la newsletter pour chaque catégorie de moto.
    - une table "newsletter"(idnewsletter, idmoto) où je stocke les membres de la newsletter. Les membres ont choisi une catégorie de moto en s'inscrivant.

    Le champ "idmoto" de la table moto se retrouve dans les 2 autres tables en tant que clé étrangère et permet donc de faire le lien.

    Ce que je souhaite faire, c'est afficher sur une page php, dans un tableau :
    - l'idmoto, la catégorie moto, le nombre d'annonces pour chaque catégorie (dont la date de publication est supérieure à la date d'envoi de la catégorie de moto concernée), le nombre de membres pour chaque catégorie et la date d'envoi de la newsletter.

    Si quelqu'un a la solution, merci beaucoup !!!

  2. #2
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Canada

    Informations forums :
    Inscription : juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Salut à toi.

    Je t'invite à regarder les conseils avant de poster un message.
    Ton titre ne suggère pas grand chose (habituellement c'est toutes des problèmes de requête sur le forum).

    Ton message devrait contenir las déclarations de tes tables et un exemple de requête afin de nous aider à t'aider.

    On va plutôt t'aider pour que tu trouves la solution que de la trouver pour toi.

    Je suis certain que tu risques d'avoir plus de réponses!

    A+

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 1 946
    Points : 2 209
    Points
    2 209
    Par défaut
    Je n'ai pas compris ce que tu appelles les membres, à tout hasard, voila un moyen de compter les Newsletter associés à une catégorie de moto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.idMoto, m.NomMoto, m.DateEnvoi,
           COUNT(DISTINCT idAn) AS Annonces,
           COUNT(DISTINCT idNewsLetter)AS Membres
    FROM Moto m LEFT OUTER JOIN Annonce a    ON m.idMoto  = a.idMoto 
                                            AND a.DateAn >= m.DateEnvoi
                LEFT OUTER JOIN NewsLetter n ON m.idMoto  = n.idMoto 
    GROUP BY m.idMoto, m.NomMoto, m.DateEnvoi
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT m.idMoto, m.NomMoto, m.DateEnvoi, 
           COUNT(Annonce) AS Annonces, 
           COUNT(Membre)AS Membres 
    From Moto a LEFT OUTER JOIN (SELECT idMoto, DateAn, 1 AS Annonce, NULL AS Membre
                                 FROM Annonce
                                UNION ALL
                                 SELECT idMoto, NULL, NULL, 1  
                                 FROM NewsLetter) b
                ON a.idMoto = b.idMoto AND b.DateAn >= a.DateEnvoi
    GROUP BY m.idMoto, m.NomMoto, m.DateEnvoi
    Je n'utilise pas DateAn comme discrimant dans l'UNION au cas où il y aurait des DateAn à NULL dans la table Annonce.
    J'ai un doute sur cette deuxième requête : faut-il remplacer b.DateAn >= a.DateEnvoi par (b.DateAn >= a.DateEnvoi OR DateAn IS NULL) ? Tu peux essayer les deux.

    Attention : les COUNT (DISTINCT xx) de la première requête sont obligatoires, mais ne sont pas supportés par tous les moteurs, donc, comme le suggère souellet :
    Je t'invite à regarder les conseils avant de poster un message.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

Discussions similaires

  1. [ZF2] problème pour faire une requête
    Par nizmo dans le forum MVC
    Réponses: 0
    Dernier message: 28/08/2012, 13h33
  2. Problème pour faire une copie de fichier.
    Par damien99 dans le forum C++
    Réponses: 1
    Dernier message: 12/02/2006, 16h37
  3. Réponses: 4
    Dernier message: 09/02/2006, 15h20
  4. probléme pour faire une copie de base de donnée
    Par nours33 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 31/12/2005, 12h35
  5. Réponses: 5
    Dernier message: 24/09/2005, 20h31

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