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 :

Ensemble de count dans une requête


Sujet :

Requêtes MySQL

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 239
    Points
    20 239
    Par défaut Ensemble de count dans une requête
    Bonjour à tous,

    J'ai une requête qui me permet de faire plusieurs COUNT et un MIN sur différente tables.
    Cette requête marche bien en mysql 5.1.36 mais sur mon serveur de prod en 5.0.45 elle ne fonctionne plus car mysql me fait remarquer que je n'ai pas de clause GROUP BY dans ma requête.

    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
     
    SELECT p.nom,p.id,sc.nbchap,sv.nbvid,svu.nbvu,DATE_FORMAT(svu.date_deb,"%d/%m/%Y") as date_deb ,r.score,DATE_FORMAT(r.date_pass,"%d/%m/%Y") as date_pass FROM produits p 
    	LEFT JOIN (
    		SELECT c.id,c.idProduit,COUNT(*) as nbchap FROM chapitres c
    	) 
    		sc ON sc.idProduit = p.id
    	LEFT JOIN (
    		SELECT v.idChapitre,COUNT(*) as nbvid FROM videos v
    	) 
    		sv ON sv.idChapitre = sc.id
    	LEFT JOIN (
    		SELECT COUNT(*) as nbvu,MIN(vu.date_vu) as date_deb,vu.idProduit FROM vus vu WHERE vu.idUser = 1
    	)
    		svu ON svu.idProduit = p.id
    	LEFT JOIN tests t ON t.idProduit = p.id
    	LEFT JOIN results r ON r.idTest = t.id
    WHERE idUser = 1
    Le but de cette requête est de compter le nombre de chapitre, le nombre de vidéos, le nombre de vidéos vu ainsi que de trouver la date de la première vidéo vu.
    Le problème étant que je n'ai pas de column sur la table vidéo me permettant de faire un group by me retournant le nombre de vidéo , je me retrouve toujours avec plusieurs lignes.

    Auriez vous une idée ? Merci

    PS : En pièce jointe un extrait du modèle de données

  2. #2
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par grunk Voir le message
    Cette requête marche bien en mysql 5.1.36 mais sur mon serveur de prod en 5.0.45 elle ne fonctionne plus car mysql me fait remarquer que je n'ai pas de clause GROUP BY dans ma requête.
    Et bien ajoutez des GROUP BY dans vos sous-requêtes.
    Je sait que MySQL accepte bien des choses mais là c'est étonnant...

    Citation Envoyé par grunk Voir le message
    Le problème étant que je n'ai pas de column sur la table vidéo me permettant de faire un group by me retournant le nombre de vidéo , je me retrouve toujours avec plusieurs lignes.
    Si vous cherchez le nombre de vidéo par produits il suffit d'utiliser des jointure internes.
    D'après ce que je comprend de votre schéma ça ressemblerai à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Count(*) AS nbVideo, p.id AS produitId
    FROM produits AS p
      INNER JOIN chapitres AS c
        ON c.idProduit = p.id
        INNER JOIN videos AS v
          ON v.idChapitre = c.id
    GROUP BY p.id
    Si vous n'y arrivez vraiment pas, montrez-nous la structure de vos tables au format SQL (CREATE TABLE..) ainsi qu'un jeu d'essais (INSERT INTO..) et le résultat exact que vous attendez histoire de tester ça.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 239
    Points
    20 239
    Par défaut
    Merci ,
    en fait comme j'étais déjà dans une jointure et une sous requête celà ne m'était pas venu à l'esprit de refaire un jointure !

    J'avais également trouver une petite astuce en faisant un GROUP BY NULL, pas très orthodoxe mais ca marchait

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

Discussions similaires

  1. [ODBC] Faire la somme d'un count dans une requête
    Par razily dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 16/06/2010, 11h57
  2. Critère sur Count dans une Requête Croisée
    Par Nana35 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/12/2008, 11h46
  3. Probleme count(*) dans une requête
    Par guappi dans le forum SQL
    Réponses: 4
    Dernier message: 19/05/2008, 11h49
  4. 2 count dans une requête
    Par illegalsene dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/11/2007, 18h20
  5. [MySQL] Deux COUNT dans une requête
    Par ecchymose dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/07/2007, 23h24

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