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 :

group by ou distinct


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut group by ou distinct
    Bonjour,
    je dois afficher une liste deroulante et des infos derrière sur une page au choix de la liste.
    Ce qui m'embete et sur la liste dérounante j'ai plusieurs fois la même valeur du titre de voyaye qui est le pays repeter plusieurs fois a part quand je fais group by mais la j'ai des voyages qui disparait
    si je fais distinct ayant besoin de plusieurs valeur pour affiche les resultats ca ne marche pas

    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
    	public function getListGroupByDestinationByType($type_voyage)
    	{
     
    		$listeVoyage = array();
     
    		$sql = 'SELECT *
    		FROM voyage where page_voyage="'.$type_voyage.'" and active_voyage="1"
    		group by titre_voyage';
     
     
    		$requete = $this->db->query($sql);
     
    		while ($Voyage = $requete->fetch(PDO::FETCH_ASSOC))
    		$listeVoyage[] = new Voyage ($Voyage);
     
    		$requete->closeCursor();
     
     
    		return $listeVoyage;
     
     
    	}
    une idée svp ? MERI

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 384
    Par défaut
    Bonjour,
    Je suis étonné que SqlServer accepte ta requête: un SELECT * avec un GROUP BY sur une seule colonne.
    Je suppose donc que ta table ne contient que 2 colonnes.
    Le jour où tu ajoutes une colonne dans ta table, ta requête ne fonctionnera plus...
    C'est (entre autre) pour ça qu'il faut bannir les SELECT *.

    Cela étant dit, si tu veux des valeurs distinctes, il faut utiliser DISTINCT.
    Si tu veux utiliser des fonctions d'agrégation (SUM, COUNT, MAX...), il faut utiliser GROUP BY.

    Là tu nous dis que "ça ne fonctionne pas".
    Mais encore ?
    Est-ce que tu peux nous donner la structure de ta table, un jeu de test et le résultat attendu ?
    Sans ces éléments (ni la requête et l'éventuel message d'erreur), on ne pourra pas t'aider.

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 566
    Billets dans le blog
    10
    Par défaut
    Si le but est de masquer les valeurs répétées dans la liste déroulante, il faut le faire coté application et non pas dans la requête *.
    Si le but est de rechercher des valeurs distinctes, alors le mot clef DISTINCT est de rigueur.
    Si enfin, le but est de calculer des agrégats, alors c'est GROUY BY qui est requis, mais en effet, comme le signale justement Tatayo, il faut que les colonnes soient cohérentes avec la clause SELECT.

    Dans tous les cas, SELECT * est à proscrire dans les traitements : résultat instable, transport de colonnes inutiles et index couvrants inéligibles.
    SELECT * ne doit être utilisé que pour des requêtes à la volée.

    * EDIT une solution toutefois par requête : utiliser la fonction LAG combinée avec un CASE
    Par exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    with tx(xid, xval) as
        (select 001, 'abcdef'  union all
         select 002, 'abcdef'  union all
         select 003, 'toto'    union all
         select 004, 'xxxxx'   union all
         select 005, 'abcdef'  union all
         select 006, 'toto'    union all
         select 007, 'azerty'  union all
         select 008, 'azerty'  union all
         select 009, 'toto'
        )
    select xid
         , case when xval=lag(xval) over(order by xval, xid) then '' else xval end as xval
    from tx


    Donne :
    xid xval
    1 abcdef
    2
    5
    7 azerty
    8
    3 toto
    6
    9
    4 xxxxx

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Je ne comprends pas bien ta question, mais au cas où, teste déjà ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT titre_voyage
    FROM voyage
    where page_voyage="'.$type_voyage.'" and active_voyage="1"
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Group by ou Distinct ?
    Par Florian54 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/12/2014, 10h57
  2. Problème de group by ou distinct
    Par Stephane_br dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/09/2011, 21h24
  3. Requête avec des groupes de conditions distincts
    Par abdelhamidem dans le forum SQL
    Réponses: 2
    Dernier message: 08/03/2011, 18h00
  4. mélanger group by et distinct
    Par tatayoyo dans le forum SQL
    Réponses: 12
    Dernier message: 25/08/2009, 10h03
  5. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10

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