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 :

Requete "Count" avec un having.


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Par défaut Requete "Count" avec un having.
    Bonjour,
    ayé, je sèche sur une requête, qui me parait pourtant simple, mais bon.

    En gros je cherche à avoir le le nombre d'enregistrement renvoyé en tout.
    Le fait que ma requete possède un having, mon resultat est le nombre d'enregistrement traité par ligne.

    A mon avis c'est super pas clair ce que je viens de dire

    Avec la requete ça sera plus simple :

    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
    SELECT 
    	count(r.id_regroupement) as nb
    FROM 
    	t_sites s,
    	t_regroupements r,
    	t_clients c
    WHERE 
    	r.id_regroupement = s.id_regroupement 
    AND 
    	r.id_client = c.id_client
    AND 
    	r.statut='actif' AND s.statut='actif' 
    AND 
    	(r.flag_welcome & 1) = 0
    AND 
    	(r.flag_welcome & 2) = 0 
    AND 
    	(r.flag_welcome & 4) = 0
    GROUP BY 
    	r.id_regroupement
    HAVING
    	MIN(date_welcome) LIKE '2006-01%'
    Sans le count, ma requete fonctionne très bien (quoi que un peu lente), mais avec le count elle me renvoi :

    nb
    ------
    1
    1
    1
    1
    1
    1
    Alors que j'aimerais

    nb
    ------
    6
    Ce qui n'arrange rien est que ma version de Mysql est 4.0.17 (donc pas de requetes imriqués)

    Merci d'avance pour vos suggestions.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !

    oula c'est quoi ces jointures croisées en vrac ? deux petites jointures externes (ou interne selon la structure de tes tables) serait tellement mieux ^^

    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
    SELECT 
    	COUNT(r.id_regroupement) as nb
    FROM 
    	t_sites s
            INNER JOIN t_regroupements r
               ON r.id_regroupement = s.id_regroupement 
    	INNER JOIN t_clients c
               ON r.id_client = c.id_client
    WHERE 
    	r.statut='actif' AND s.statut='actif' 
    AND 
    	(r.flag_welcome & 1) = 0
    AND 
    	(r.flag_welcome & 2) = 0 
    AND 
    	(r.flag_welcome & 4) = 0
    GROUP BY 
    	r.id_regroupement
    HAVING
    	MIN(date_welcome) LIKE '2006-01%'
    ensuite, le problème vient du fait que le GROUP BY va se faire à la fois sur le MIN et sur le COUNT....

    et sans sous-requêtes, il va falloir passer par une table temporaire, ou alors par un langage externe (avantage, compter le nombre de resultat est une opération triviale )

    Dans tous les cas, tu pourras retirer le COUNT
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Par défaut
    Citation Envoyé par Swoög
    Salut !

    oula c'est quoi ces jointures croisées en vrac ? deux petites jointures externes (ou interne selon la structure de tes tables) serait tellement mieux ^^

    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
    SELECT 
    	COUNT(r.id_regroupement) as nb
    FROM 
    	t_sites s
            INNER JOIN t_regroupements r
               ON r.id_regroupement = s.id_regroupement 
    	INNER JOIN t_clients c
               ON r.id_client = c.id_client
    WHERE 
    	r.statut='actif' AND s.statut='actif' 
    AND 
    	(r.flag_welcome & 1) = 0
    AND 
    	(r.flag_welcome & 2) = 0 
    AND 
    	(r.flag_welcome & 4) = 0
    GROUP BY 
    	r.id_regroupement
    HAVING
    	MIN(date_welcome) LIKE '2006-01%'
    ensuite, le problème vient du fait que le GROUP BY va se faire à la fois sur le MIN et sur le COUNT....

    et sans sous-requêtes, il va falloir passer par une table temporaire, ou alors par un langage externe (avantage, compter le nombre de resultat est une opération triviale )

    Dans tous les cas, tu pourras retirer le COUNT
    Ben j'avais prévu les table temporaire. (je sentais que j'avais pas le choix)
    Pour le coup des jointures, il me semblait avoir lu que cela ne changeait rien du tout !

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    d'un point de vue resultat peut-être pas, mais d'un point de vue performances et sémantique si, parce que le type de filtrage effectué sur les données n'est pas le même, dans ce cas là, c'est plus performant
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Par défaut
    Citation Envoyé par Swoög
    d'un point de vue resultat peut-être pas, mais d'un point de vue performances et sémantique si, parce que le type de filtrage effectué sur les données n'est pas le même, dans ce cas là, c'est plus performant
    Sur la semantique nous sommes d'accord ... mais le fait est qu'en pratique ta requete mets 2 fois plus de temps .

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par BrYs
    Sur la semantique nous sommes d'accord ... mais le fait est qu'en pratique ta requete mets 2 fois plus de temps .
    première fois que je vois ça c'est pas normal... lol

    Bah... tant pis pour la sémantique alors ... mais j'comprends pas...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

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

Discussions similaires

  1. [SQL2K]Requete sur une chaine avec une ou plusieurs quote
    Par tazamorte dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/04/2007, 08h22

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