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 :

COUNT avec une condition sur 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : apprenti

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut COUNT avec une condition sur 2 tables
    Bonjour,
    J'ai actuellement un projet en c# dans lequel je dois manipuler des bases de données, disons que j'ai "en gros" 2 tables :
    -une table avec un identifiant (clé primaire, unique, ..), une date de création qui est donnée automatiquement et plein d'autres infos mais qui ne concernent pas ce problème. Cette table se remplit automatiquement à chaque fois que l'on vient ajouter un produit via le programme écrit en c# ;
    -une 2e table dans laquelle, après avoir ajouté x produits (500 dans mon cas), vient rajouter l'id et la date du 500e produit dans cette table (car tous les 500 ajouts, il y a des vérifications à réaliser).

    Au niveau de l'ajout dans la 2e table, tout se passe bien, là où le problème se pose c'est pour compter le nombre de produits avant le dernier "cap de 500" atteint.

    Disons que ma table 1 est nommée "Produit" et contient un "id" une "date" et des infos peu importantes.
    Et ma 2e table, disons "Liste" et qui contient elle seulement un "id" et une "date".

    J'avais pensé à cette requête au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(*)
    FROM Produit as P
    INNER JOIN Liste as L
    ON P.date>MAX(L.date)
    Qui m'aurait permis de compter le nombre de valeurs, dans la table produit, dont la date est supérieure à la date maximale de la 2e table.
    Mais dans la pratique, ça ne fonctionne pas vraiment comme ça...

    Quelqu'un aurait-il une petite idée ? Ou ne serait-ce qu'une indication qui me permettrait de faire fonctionner cette requête ?

    Merci d'avance !
    Bonne journée !

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    La jointure ne va pas, enfin si j'ai bien compris.

    Si je ne me trompe pas, finalement, table 1 et 2 partagent les mêmes produits et ID...

    Donc il faut faire la jointure sur l'ID (ce qui n'avait pas été fait), et sur ce résultat de jointure, appliquer le filtre sur la date.

    Donc plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(*)
    FROM Produit as P
    INNER JOIN Liste as L
    ON L.ID=P.ID
    HAVING P.date>MAX(L.date)

  3. #3
    Candidat au Club
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : apprenti

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    En fait, c'est plutôt la table 2 qui contient quelques éléments de la table 1.
    Pour être plus précis, la table 1 est la table qui regroupe tous les objets créés (la table se remplit donc automatiquement) et la 2e ne contient que quelques éléments, actuellement tous les 500 éléments, nombre après lequel il faut réaliser une maintenance, et donc je dois garder en mémoire le 500e / le 1000e / ..objet.
    Je sais que ce n'est pas la manière la plus simple, mais c'est une amélioration (à la demande du client) d'un programme dont je ne suis pas l'auteur. La base dont ils disposaient ne permettait pas de résoudre ce problème, et ils ne voulaient pas qu'on touche à leur table "produit", on a donc dû y ajouter une 2e table pour faire cela.

    Cependant, j'ai trouvé une solution (du moins, cela fonctionne en local chez moi, je n’ai pas encore essayé sur leur base, mais il n'y a pas de raison que cela ne marche pas).

    Pour info, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COUNT (*)
    FROM produit as p
    INNER JOIN(
        SELECT MAX(date) Max_date
        FROM liste) as l
    ON p.date>l.Max_date

    Sur mon local j'avais essayé en mettant :
    Dans produit : les dates du 1 au 5 janvier
    Dans liste : le 1er et 2 janvier
    Et cela me retournait 3 !

    Après je ne sais pas si c'est la manière la plus optimisée de le faire, mais à la limite, tant que ça fonctionne...

    Merci pour les informations quand même,
    Bonne soirée !

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

Discussions similaires

  1. [MySQL] Mise à jour avec une condition sur une vue
    Par thor76160 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/03/2009, 01h00
  2. Probleme avec une requête sur 2 tables
    Par Sieg Hart dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2009, 14h14
  3. [XSLT]Trouver un noeud avec une condition sur ses sous-noeuds
    Par enguerran dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2007, 11h00
  4. Réponses: 4
    Dernier message: 23/10/2006, 09h09
  5. Requete avec une condition sur le resultat [10g]
    Par hotkebab99 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/09/2006, 11h33

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