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

Langage SQL Discussion :

Limiter les résultats


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Points : 160
    Points
    160
    Par défaut Limiter les résultats
    Bonsoir,

    J'ai une requete SQL fonctionnant parfaitement jusqu'à présent, mais je voudrais "l'optimiser". Tout d'abord la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT `montant`, `membre_id`, `heure` 
    FROM `table` 
    WHERE `lot`="10"
    GROUP BY `montant`
    HAVING COUNT(*)=1
    ORDER BY `montant` ASC
    LIMIT 0, 10
    Donc je sélectionne dans ma table "montant, membre_id, heure"
    Je limite les résultats en ne sélectionnant que les montants qui sont uniques dans la table.

    Je voudrais en plus de cela, limiter les montants uniques à un seul membre, c'est à dire que les 10 résultats soit unique et que ça soit que des membre_id différents

    Merci à vous.

    Cordialement.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 790
    Points
    30 790
    Par défaut
    La manière tordue et a-normale dont MySQL implémente les regroupements m'empêche de bien comprendre ce que fait ta requête.

    Est-ce bien ceci qu'il faudrait écrire avec les SGBD qui respectent la norme pour obtenir le même résultat ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  montant
        ,   membre_id
        ,   heure 
    FROM    matable AS t1 
    WHERE   lot = '10'
        AND EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t2.lot = '10'
                    AND t1.montant = t2.montant
                GROUP BY    t2.montant //  Ligne non indispensable
                HAVING  COUNT(*) = 1
            )
    ORDER BY    montant ASC
    Dans ce cas, le même montant ne peut apparaître qu'une seule fois...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Points : 160
    Points
    160
    Par défaut
    Merci beaucoup de ta réponse,

    Dans ta requête il me semble que chacun des résultat sélectionné peut être plusieurs fois le même utilisateur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  montant, membre, heure 
    FROM    encheres AS t1 
    WHERE   lot = '29' AND `gain`="0"
        AND EXISTS
            (   SELECT  1
                FROM    encheres AS t2
                WHERE   t2.lot = '29'
                    AND t1.montant = t2.montant
                GROUP BY    t2.montant
                HAVING  COUNT(*) = 1
            )
    ORDER BY montant ASC LIMIT 0,10
    [COLOR=#000000 ! important][/COLOR]

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Points : 160
    Points
    160
    Par défaut
    Peut-être un distinct sur ta sous requete ?

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

Discussions similaires

  1. limiter les résultats "foreach"
    Par maxence64 dans le forum Langage
    Réponses: 13
    Dernier message: 11/11/2011, 14h57
  2. limiter les résultats numérique a 2 chiffres après la virgule
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/05/2008, 17h32
  3. Limiter les résultats d'une zone de liste déroulante (requête)
    Par Tipstitou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/02/2008, 11h01
  4. [XI][Crystal] Limiter les résultats
    Par Shahix dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 21/08/2007, 14h25
  5. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46

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