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 :

Problème avec requêtes multiples [MySQL-5.1]


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut Problème avec requêtes multiples
    Bonsoir tous,

    Depuis qq heures je patauge dans un pb de requête multiples.
    Je souhaite faire dans un même appel 2 requêtes en utilisant UNION, mon code est le suivant :
    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
    SELECT * FROM (SELECT 1 AS anlyseTraffic YEARWEEK(Heure) AS Semaine, WEEKDAY( Heure ) AS JourSemaine, SUM( Duree ) AS totalVisite, COUNT( * ) AS nbreLigne
    FROM Traffic AS t1
    WHERE t1.id =2
    AND t1.Duree >10
    AND t1.NomPage >=30
    AND t1.NomPage <200
    GROUP BY JourSemaine ASC 
    WITH ROLLUP 
    UNION
    SELECT 2 AS anlyseTraffic * FROM (
    SELECT 3 AS anlyseTraffic YEARWEEK(Heure) AS Semaine, WEEKDAY(Heure) AS JourSemaine, SUM(Duree) AS totalVisite, COUNT(*) AS nbreLigne 
    FROM Traffic AS t2 
    WHERE t2.id =2
    AND t2.Duree >10
    AND t2.NomPage >=30
    AND t2.NomPage <200
    GROUP BY Semaine ASC WITH ROLLUP)
    ORDER BY Semaine
    Si qq peut m'aider pour faire fonctionner cette requête, d'avance merci !
    Google n'a pas été le père Noêl habituel (plutôt genre père fouettard !) donc je sèche !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonsoir,


    generallement les problemes de requetes avec union ce resolvent avec les deux conditions suivantes :
    - les sous requetes doivent avoir le meme nombre de colonne
    - les colonnes doivent etre du meme type


    une fois cs deux conditions reunit, si vous avez encore des roblemes, revenez
    et cette fois ci avec le message d'erreur sql..

    et avant toute chose il faut imperativement tester unitairement chaque sous requete !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Merci pour ta réponse,
    J'avais bien vérifié bien les conditions que tu m'as précisé, les requêtes ont le même nombre et type de col. Les 2 requêtes fonctionnent correctement séparément. Seules les GROUP BY diffèrent, en fait je veux une requête avec comme résultat les jours de semaine (WEEKDAY( Heure ) AS JourSemaine) GROUPY BY GROUP BY JourSemaine ASC WITH ROLLUP a laquelle j'ajoute les résultats de la seconde requête qui a comme résultats les semaines (YEARWEEK(Heure) AS Semaine) GROUP BY Semaine ASC WITH ROLLUP.
    Ce matin j'ai reformulé ma requête comme ça :
    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 YEARWEEK(Heure) AS Semaine, WEEKDAY( Heure ) AS JourSemaine, SUM(tmp.Duree) AS duree_totale
    FROM
    (
    	SELECT NomPage, Duree, Heure, WEEKDAY( Heure ) AS JourSemaine, YEARWEEK(Heure) AS Semaine
    	FROM Comp_Traffic
    	WHERE id = 2
            AND Duree >10
            AND NomPage >=30
            AND NomPage <200
            GROUP BY JourSemaine ASC WITH ROLLUP 
     
    	UNION ALL
    	SELECT NomPage, Duree, Heure, WEEKDAY( Heure ) AS JourSemaine, YEARWEEK(Heure) AS Semaine
    	FROM Comp_TrafficArchive
    	WHERE id = 2
            AND Duree >10
            AND NomPage >=30
            AND NomPage <200
            GROUP BY Semaine ASC WITH ROLLUP 
    ) tmp
    Je n'obtiens qu'une ligne de résultat !!!! Grrrrr
    Comment faire ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    c'est normal.

    votre nouvelle requête utilise, pour la sélection finale, des fonctions d'agrégats et ceci sans clause group by.

    Du coup vous n'avez qu'une seule ligne.

    c'est la faute à MySql là qui ne respect pas les normes SQL, votre requete serait rejetée par tout autre SGBD a cause de la syntaxe.

    Quand vous utilisez une fonction d'agrégat, toute colonne présente dans la clause select et non encadrée par une fonction d'agrégat doivent se trouver aussi dans la clause group by

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Merci pour ces explications mais je n'ai pas tout compris,
    Je fais comment pour m'en sortir ?
    D'avance merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Bonsoir à tous j'ai fait un peu évolué le pb,

    Je souhaite que le 1er sélect de l'UNION ALL soit GROUP BY JourSemaine ASC WITH ROLLUP et trié par ORDER BY totalVisite, le 2nd sélect de l'UNION ALL soit GROUP BY Semaine ASC WITH ROLLUP.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (SELECT SUBSTRING(YEARWEEK( Heure ), 5) AS Semaine, WEEKDAY( Heure ) AS JourSemaine, SUM( Duree ) AS totalVisite, COUNT( * ) AS nbreLigne, MIN(Heure) AS dateDebut,  MAX(Heure) AS dateFin
    		FROM  `Traffic` 
    		WHERE  `id` =2 AND  `Duree` >10 AND NomPage >=30 AND NomPage <200
    		GROUP BY JourSemaine ASC WITH ROLLUP
    		UNION ALL 
    		SELECT YEARWEEK( Heure ) AS Semaine, WEEKDAY( Heure ) AS JourSemaine, SUM( Duree ) AS totalVisite, COUNT( * ) AS nbreLigne, MIN(Heure) AS dateDebut,  MAX(Heure) AS dateFin
    		FROM  `Traffic` 
    		WHERE  `id` =2 AND  `Duree` >10 AND NomPage >=30 AND NomPage <200
    		GROUP BY Semaine ASC WITH ROLLUP
    Je ne sais pas comment finaliser cette requête !

    Un petite aide serait la bienvenue.

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

Discussions similaires

  1. Problèmes avec Requêtes d'extraction
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 03/06/2006, 16h25
  2. Problème avec requête ajout
    Par teffal dans le forum Access
    Réponses: 3
    Dernier message: 29/04/2006, 17h41
  3. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 19h02
  4. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 04h40
  5. Réponses: 22
    Dernier message: 05/07/2005, 01h04

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