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 :

MYSQL PB pour afficher 10 informations par catégorie


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Par défaut MYSQL PB pour afficher 10 informations par catégorie
    Bonjour,
    Je cherche à faire une requête spéciale, elle semble simple pourtant impossible de la faire.
    _____________
    J'ai une table Client (je passe les détails des colonnes nom prénom etc)
    idclient Idrégion
    _____________
    une table commande
    idclient montantcommande
    _____________
    Je cherche à afficher les 10 meilleurs commandes de chaque région.
    Avec une magouille d'algo je peux avoir le résultat mais je cherche à améliorer mon sql.

    Autre recherche, afficher la somme des 10 meilleurs commandes par région. Ce qui implique un peu d'avoir trouvé la première requête.

    Exemple : cette requête me permet d'avoir la somme de toutes les commandes par région.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select sum(montantcommande) as total,*
    From commande LEFT join client on commande.Idclient=client.Idclient
    LEFT join client on region.Idregion=client.Idregion
    Where 1
    groupe by Idregion
    ORDER by montantcommande DESC;
    C'est pas mal mais je cherche à avoir la somme de 10 meilleurs commandes et non de toutes les commandes.

    Si je rajoute Limit 10 je n'aurais que 10 régions.
    Si je change SUM par MAX j'ai la meilleure commande par région.

    Voila le gros de mon problème, en espérant avoir été précis sur mon problème

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Regarde cette source, ce n'est pas dans la FAQ, mais ça devrait y être.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Par défaut
    Merci, à première vu l'idée est bonne, j'ai juste un problème, c'est que la requête demande trop de ressources, pour afficher 10 régions je me retrouve à attendre un temps fou.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT sum(e.montant_commande) as nb,c.Id_client, c.Nom_client,  c.Id_region2
    From commande as e LEFT join client as c on e.Id_client=c.Id_client
    WHERE (
    SELECT COUNT(*)
    From commande as e1 LEFT join client as c1 on e1.Id_client=c1.Id_client
    WHERE c1.Id_region2 = c.Id_region2
    AND c1.Id_client < c.Id_client
    ) < 10 
    order by nb desc
    limit 20
    Sans le SUM, j'arrive à avoir un résultat mais vu que je suis obligé de limiter le nombre, impossible d'exploiter ce genre d'information.


    Information complémentaire : je fais des tests sur une très grosse base de données : 200 000 utilisateurs, 300 000 commandes.

    L'idée final étant de faire des classements par région, par ville, voire d'autres critères sur le même genre de requête.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 067
    Par défaut
    Bonjour,

    Sous quelle version de MySQL travailles-tu ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Par défaut
    version 5.1.36

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 067
    Par défaut
    OK. Pas étonnant alors que les performances se dégradent sur une sous-requête corrélée avec une volumétrie un peu forte.
    A partir de la version 5.5, les perfs ont commencé à s'améliorer.

    Éventuellement, il faut tenter de passer par des tables temporaires pour éliminer les sous-requêtes...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. composants pour afficher des informations cliquables
    Par Abou Zar dans le forum Composants VCL
    Réponses: 14
    Dernier message: 13/08/2010, 09h26
  2. Comment faire pour afficher les informations d'une base de donnée
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/03/2008, 10h24
  3. Réponses: 4
    Dernier message: 27/11/2007, 09h58
  4. [MySQL] Afficher x résultats par catégorie
    Par lorange dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/09/2007, 02h14
  5. [AJAX] Liste déroulante pour afficher les informations en ajax div ?
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 17/11/2006, 10h06

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