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 :

INNER JOIN avec plusieurs lignes, prendre celle avec le prix le plus petit


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut INNER JOIN avec plusieurs lignes, prendre celle avec le prix le plus petit
    Salut!

    Je suis bloqué avec une requête pas si compliquée que ça, je suis un peu rouillé.

    J'ai 3 tables,

    - 1 de groupe tblproductgroups
    - 1 de produits tblproducts
    - 1 de de prix tblpricing

    Je veux sélectionner le produit le moins cher de la catégorie 1,2,3 et retourner son id, name, description, et prix (annually)

    ma requête de base est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select `tblproductgroups`.`id`, `tblproductgroups`.`name`, `tblproducts`.`description`, `tblpricing`.`annually` 
    from `tblproductgroups` 
    inner join `tblproducts` on `tblproductgroups`.`id` = `tblproducts`.`gid` and `tblproducts`.`hidden` = 0 
    inner join `tblpricing` on `tblproducts`.`id` = `tblpricing`.`relid` 
    where `tblproductgroups`.`hidden` = 0 and `tblproductgroups`.`id` in (1, 2, 3) and `tblpricing`.`type` = 'product' group by `tblproductgroups`.`id`
    La requête fonctionne, sauf qu'il sélectionne la première ligne qu'il trouve le "inner join `tblproducts`". Comment agir la dessus ?
    Comme je ne peux pas mettre "order by annually ASC" dans un JOIN...

    Merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous ne pourrez pas obtenir ce que vous voulez avec un GROUP BY.

    Mais comme eut dit Lapalisse, le produit avec le prix le plus petit, est le produit pour lequel il n'en existe pas d'autre avec un prix inférieur...
    Voyez donc du coté de la clause NOT EXISTS.
    Il y a beaucoup d'exemple sur le forum pour trouver le "dernier" , "le plus récent",... vous pouvez appliquer le même principe pour trouver le moins cher

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 382
    Points : 19 069
    Points
    19 069
    Par défaut
    Salut mickael.be.

    Peut-être quelque chose dans ce genre là :
    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
    23
    select      t1.`id`,
                t1.`name`,
                t2.`description`,
                t3.`annually`
    
          from  `tblproductgroups` as t1
    
    inner join  `tblproducts`     as t2
            on  t2.`gid`    = t1.`id`
           and  t2.`hidden` = 0
    
    inner join  `tblpricing`      as t3
            on  t3.`relid`  = t2.`id`
           and  t3.`type`   = 'product'
    
         where  t1.`hidden`   = 0
           and  t1.`id`       in (1, 2, 3)
                t3.`annually` = ( select  min(t4.`annually`)
                              from  `tblpricing` as t4
                             where  t4.`relid` = t3.`relid`
                               and  t4.`type`  = t3.`type`)
    
      group by  t1.`id`;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/09/2017, 17h48
  2. JOptionPane avec plusieur ligne d'entrée
    Par harris_macken dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 28/03/2008, 09h43
  3. DBCtrlGrid formatage avec plusieurs lignes
    Par yamino dans le forum Bases de données
    Réponses: 6
    Dernier message: 23/11/2007, 09h18
  4. [MySQL] Comment affiché un résultat avec plusieurs lignes et plusieurs champs dans un tableau
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/05/2007, 14h19
  5. Champ text avec plusieurs lignes ?
    Par Death83 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 17/10/2006, 11h42

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