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

MySQL Discussion :

Retourner une liste de produits avec le dernier prix enregistré (en fonction de la date)


Sujet :

MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 75
    Points : 60
    Points
    60
    Par défaut Retourner une liste de produits avec le dernier prix enregistré (en fonction de la date)
    Bonjour,

    J’essaye de me baser sur ce poste mais décidément je n’y arrive pas alors que ma question m’a l’air plus simple.
    http://www.developpez.net/forums/d13...fonction-date/


    Voici mes tables (simplifiées)
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `t_langue`
    --
     
    CREATE TABLE IF NOT EXISTS `t_langue` (
      `lang_id` int(11) NOT NULL AUTO_INCREMENT,
      `lang_libelle` varchar(100) NOT NULL,
      PRIMARY KEY (`lang_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `t_langue`
    --
     
    INSERT INTO `t_langue` (`lang_id`, `lang_libelle`) VALUES
    (1, 'Français'),
    (2, 'Anglais');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `t_produit`
    --
     
    CREATE TABLE IF NOT EXISTS `t_produit` (
      `pr_id` int(11) NOT NULL AUTO_INCREMENT,
      `pr_ref_fournisseur` varchar(100) NOT NULL,
      `pr_stock` decimal(10,4) NOT NULL,
      `pr_active` tinyint(1) NOT NULL,
      PRIMARY KEY (`pr_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
     
    --
    -- Contenu de la table `t_produit`
    --
     
    INSERT INTO `t_produit` (`pr_id`, `pr_ref_fournisseur`, `pr_stock`, `pr_active`) VALUES
    (1, '4401', '200.0000', 1),
    (2, '4402', '500.0000', 1),
    (3, '4456', '10.0000', 1);
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `t_produit_lang`
    --
     
    CREATE TABLE IF NOT EXISTS `t_produit_lang` (
      `pr_id` int(11) NOT NULL,
      `lang_id` int(11) NOT NULL,
      `pr_nom` varchar(100) NOT NULL,
      `pr_description_courte` varchar(250) NOT NULL,
      `pr_description` text NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `t_produit_lang`
    --
     
    INSERT INTO `t_produit_lang` (`pr_id`, `lang_id`, `pr_nom`, `pr_description_courte`, `pr_description`) VALUES
    (1, 1, 'Mon produit 1', 'Blablabla', 'Blablabla Blablabla Blablabla Blablabla'),
    (1, 2, 'My Product 1', 'Blibliblibli', 'Blibliblibli Blibliblibli Blibliblibli Blibliblibli'),
    (2, 1, 'Mon produit 2', 'Blobloblo', 'Blobloblo Blobloblo Blobloblo Blobloblo'),
    (2, 2, 'My Product 2', 'Blublublublu', 'Blublublublu Blublublublu Blublublublu'),
    (3, 1, 'Mon produit 3', 'Blyblybly', 'Blyblybly Blyblybly Blyblybly'),
    (3, 2, 'My Product 3', 'Bloubloubloublou', 'Bloubloubloublou Bloubloubloublou Bloubloubloublou');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `t_produit_prix`
    --
     
    CREATE TABLE IF NOT EXISTS `t_produit_prix` (
      `pp_id` int(11) NOT NULL AUTO_INCREMENT,
      `pr_id` int(11) NOT NULL,
      `pr_prix_ht` decimal(10,4) NOT NULL,
      `pr_date` date NOT NULL,
      PRIMARY KEY (`pp_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
     
    --
    -- Contenu de la table `t_produit_prix`
    --
     
    INSERT INTO `t_produit_prix` (`pp_id`, `pr_id`, `pr_prix_ht`, `pr_date`) VALUES
    (1, 1, '24.6700', '2016-10-03'),
    (2, 1, '45.5000', '2016-10-20'),
    (3, 2, '250.9800', '2016-10-21'),
    (4, 3, '3721.9800', '2016-10-22'),
    (5, 1, '10.0000', '2014-08-04'),
    (6, 1, '425.0000', '2015-02-11'),
    (7, 1, '32.0000', '1950-10-11'),
    (8, 2, '50.0000', '1950-10-11'),
    (9, 3, '12000.0000', '1950-10-11');
    J’essaye de faire une vue qui m’affiche la liste de mes produits avec les textes dans la bonne langue (nom, description,…), stock, référence, patin couffin,… et le prix, le dernier enregistré (donc inférieur ou égale à la date demandée).

    J’y arrive quand je veux un seul produit comme cela…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT p.pr_id AS id, p.pr_ref_fournisseur AS reffour, pl.pr_nom AS nom, pl.pr_description_courte AS descshort, pl.pr_description AS desclong, p.pr_stock AS stock, pp.pr_prix_ht AS prixht, pp.pr_date AS dateadd
    FROM `t_produit` AS p
    INNER JOIN `t_produit_prix` AS pp ON p.pr_id = pp.pr_id
    INNER JOIN `t_produit_lang` AS pl ON p.pr_id = pl.pr_id
    WHERE p.pr_id = 3
    AND pp.pr_date <= '2016-11-02'
    ORDER BY pp.pr_date DESC LIMIT 0,1
    Mais pour sortir la liste je n’y arrive plus. Le pire c’est que j’ai sus. Je crois que je devrai avoir un WHERE (select…) quelque chose.

    Please Help

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonsoir,
    C'est ça que vous voulez ?

    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
    SELECT p.pr_id                  AS id
         , p.pr_ref_fournisseur     AS reffour
         , pl.pr_nom                AS nom
         , pl.pr_description_courte AS descshort
         , pl.pr_description        AS desclong
         , p.pr_stock               AS stock
         , pp.pr_prix_ht            AS prixht
         , pp.pr_date               AS dateadd
    FROM `t_produit`           AS p
    INNER JOIN t_produit_prix  AS pp 
       ON pp.pr_id = p.pr_id
    INNER JOIN t_produit_lang  AS pl 
       ON pl.pr_id = p.pr_id
    WHERE  pp.pr_date <= '2016-11-02'
      and not exists
         (select 1
          from t_produit_prix as px
          where px.pr_id = p.pr_id
            and px.pr_date <= '2016-11-02'
            and px.pr_date > pp.pr_date)

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 75
    Points : 60
    Points
    60
    Par défaut
    Exactement !!!

    Juste à rajouter la condition langue que j'avais pas indiqué dans mon message.

    Merci infiniment

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

Discussions similaires

  1. retourner une list avec webservice
    Par haizoum dans le forum Services Web
    Réponses: 5
    Dernier message: 10/07/2008, 17h21
  2. Tri d'une liste d'attente avec priorité
    Par boutchz dans le forum Access
    Réponses: 8
    Dernier message: 02/03/2006, 18h42
  3. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  4. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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