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 :

sous requête trop gourmande !


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut sous requête trop gourmande !
    Bonjour


    J'ai une table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE demande (
        id int(11) NOT NULL auto_increment,
        refartisan int(11) null,
        nombre tinyint NOT NULL,
    )

    chaque artisan peut faire plusieurs demandes, et la valeur de "nombre" peut être 1 ou 2
    La plus part des artisans font soit
    - 1 demande avec nombre = 1 ou nombre =2
    - 2 demande avec nombre = 1

    Mais il peut arriver que des artisans fasse plus de demande si bien pour pour cet artisan la somme de "nombre" soit supérieure à 2.
    Je voudrais avoir la liste de ces artisans.

    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * 
    from demande 
    group by refartisan 
    having sum(nombre)>2
    je trouve bien les artisans qui ont fait des demandes surnuméraires mais ca ne m'affiche que la première demande de chaque artisan.
    Je souhaiterai les voir toutes.

    J'ai essayé avec une sous-requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * 
    from demande 
    where refartisan in 
    (
      select refartisan 
      from demande 
      group by refartisan 
      having sum(nombre)>2
    )
    Ca marche bien mais les temps de réponse ne sont pas très bon et pour l'instant la table est pas très grosse (en vérité la requete principale est faite sur une vue un peu grosse ce qui aggrave la situation).

    Y-at-il une autre alternative plus efficace ?

  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
    bonjour,

    je dirais que non.

    Au pire vous pouvez changer la syntaxe, mais je ne crois pas que cela changera grand chose ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM demande a
    INNER JOIN (SELECT refartisan FROM demande GROUP BY refartisan HAVING SUM(nombre) > 2) as b on a.refartisan  = b.refartisan

    Il manque peut être des indexs ceci dit.
    Fournissez le EXPLAIN de votre requête ainsi que la structure (DESC) des tables concernées par la requête (celle dans la vue).

Discussions similaires

  1. [2005] Temps exécution trop long sur 3 tables avec sous-requête
    Par afrodje dans le forum Développement
    Réponses: 10
    Dernier message: 29/04/2014, 18h15
  2. requéte trop longue sous ie
    Par devboy dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 16/05/2007, 16h43
  3. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14
  4. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/03/2004, 23h20
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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