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

SQL Procédural MySQL Discussion :

SELECT ne retourne pas tous les éléments d'une vue


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut SELECT ne retourne pas tous les éléments d'une vue
    Bonjour,

    Dans MySQL j'ai créer une vue (appelée view_act_presta) qui récupère bon nombre de données. La vue fonctionne correctement et me retourne les données telles que je les ai demandées. Voici un exemple de données renvoyé par la vue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cYear 	cMonth 	cDay 	cPresta 	cNom 	cNbreCde 	cNbreCdeLiv 	cLogin 			cLogout 		cBrut 	cCom 	cNet 
    2012 	3 	18 	15 	La Farigoule 	0 			0 	2012-03-18 07:30:18 	NULL			0.00 	0.00 	0.00
    2012 	3 	18 	15 	La Farigoule 	0 			0 	0 			2012-03-18 09:06:09 	0.00 	0.00 	0.00
    2012 	3 	19 	15 	La Farigoule 	0 			0 	2012-03-19 07:57:48 	NULL			0.00 	0.00 	0.00
    2012 	3 	19 	15 	La Farigoule 	0 			0 	0 			2012-03-19 07:59:50 	0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	0 			0 	2012-03-20 10:13:31 	NULL			0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	0 			0 	0 			2012-03-20 11:48:21 	0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	1 			0 	NULL			NULL			26.00 	2.60 	23.40
    Pour me permettre de grouper les resultats de cette vue, j'ai créé la procedure stockée suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT cYear, cMonth,
    cDay, cPresta, cNom,
    SUM(cNbreCde) AS cNbreCde,
    SUM(cNbreCdeLiv) AS cNbreCdeLiv,
    cLogin,
    cLogout,
    SUM(cBrut) AS cBrut,
    SUM(cCom) AS cCom,
    SUM(cNet) AS cNet
    FROM view_act_presta
    WHERE cPresta = 15
    GROUP BY cYear, cMonth, cDay, cPresta
    Le résultat de ce select est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cYear 	cMonth 	cDay 	cPresta 	cNom 	cNbreCde 	cNbreCdeLiv 	cLogin 			cLogout 	cBrut 	cCom 	cNet 
    2012 	3 	18 	15 	La Farigoule 	0 			0 	2012-03-18 07:30:18 	NULL		0.00 	0.00 	0.00
    2012 	3 	19 	15 	La Farigoule 	0 			0 	2012-03-19 07:57:48 	NULL		0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	1 			0 	2012-03-20 10:13:31 	NULL		26.00 	2.60 	23.40
    Mon problème est donc que la valeur 'cLogout' retournée par la vue ne s'affiche pas dans mon select et que je ne comprend pas pourquoi. Si quelqu'un peut m'orienter vers le problème, je vous en remercie d'avance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sinon les valeurs des colonnes oubliées sont aléatoires.
    Un autre SGBD que le trop permissif MySQL aurait rejeté la requête.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci pour la réponse, mais dans ce cas, si je rajoute au GROUP BY tous les éléments non regroupés comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT cYear, cMonth, cDay, cPresta, cNom, SUM( cNbreCde ) AS cNbreCde, SUM( cNbreCdeLiv ) AS cNbreCdeLiv, cLogin, cLogout, SUM( cBrut ) AS cBrut, SUM( cCom ) AS cCom, SUM( cNet ) AS cNet
    FROM view_act_presta
    WHERE cPresta =15
    GROUP BY cYear, cMonth, cDay, cPresta, cNom, clogin, cLogout
    je me retrouve avec la même chose que ma vue soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cYear 	cMonth 	cDay 	cPresta 	cNom 	cNbreCde 	cNbreCdeLiv 	cLogin 			cLogout 		cBrut 	cCom 	cNet
    2012 	3 	18 	15 	La Farigoule 	0 		0 		NULL			2012-03-18 09:06:09 	0.00 	0.00 	0.00
    2012 	3 	18 	15 	La Farigoule 	0 		0 		2012-03-18 07:30:18 	NULL			0.00 	0.00 	0.00
    2012 	3 	19 	15 	La Farigoule 	0 		0 		NULL			2012-03-19 07:59:50 	0.00 	0.00 	0.00
    2012 	3 	19 	15 	La Farigoule 	0 		0 		2012-03-19 07:57:48 	NULL			0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	1 		0 		NULL			NULL			26.00 	2.60 	23.40
    2012 	3 	20 	15 	La Farigoule 	0 		0 		NULL			2012-03-20 11:48:21 	0.00 	0.00 	0.00
    2012 	3 	20 	15 	La Farigoule 	0 		0 		2012-03-20 10:13:31 	NULL			0.00 	0.00 	0.00


    Ce que j'essaie de faire est d'avoir une seule ligne par cYear, cMonth, cDay, cPresta regroupant l'ensemble des infos (donc le cLogout) si ces informations existent.

    Peut être y a-t-il une autre solution pour achever cela à partir de la vue ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Apparemment, pour chaque quadruplet {cYear, cMonth, cDay, cPresta}, tu as un login sur une ligne, un logout sur une autre ligne, éventuellement une autre ligne avec ni login ni logout.
    As-tu essayé avec un MAX(login) et un MAX(logout) ?

    Quant au nom, il semble être le même pour une presta donnée donc tu dois pouvoir l'inclure dans le GROUP BY.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT cYear, cMonth, cDay, cPresta, cNom,
    	SUM(cNbreCde) AS cNbreCde,
    	SUM(cNbreCdeLiv) AS cNbreCdeLiv,
    	MAX(cLogin) AS cLogin,
    	MAX(cLogout) AS cLogout,
    	SUM(cBrut) AS cBrut,
    	SUM(cCom) AS cCom,
    	SUM(cNet) AS cNet
    FROM view_act_presta
    WHERE cPresta = 15
    GROUP BY cYear, cMonth, cDay, cPresta, cNom

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Super, en effet l'utilisation de MAX permet d'afficher le cLogout. Merci pour ton aide, car cela ne me serais pas venu à l'idée...
    Encore merci.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/03/2015, 10h34
  2. Retourner tous les éléments d'une listbox
    Par calvi2002 dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 29/04/2014, 13h48
  3. [MySQL] mon select ne renvoie pas tous les champs
    Par dhonore dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/07/2011, 16h00
  4. Appliquer un style à tous les éléments d'une table
    Par licorne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/01/2007, 14h31
  5. [code] Comment lister tous les éléments d'une form
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/10/2006, 11h23

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