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

Schéma Discussion :

Modèle de tarif dégressif selon la quantité


Sujet :

Schéma

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut Modèle de tarif dégressif selon la quantité
    Bonjour,

    Je suis en train de travailler sur un nouveau site internet, j'ai besoin de votre expérience pour concevoir intelligemment ma base de donnée, en faite la je patauge.

    Donc je veux mettre en ligne un site qui compare les livres photo voici comment j'ai structuré ma base pour le moment :

    Table produit :
    id
    fabriquant
    modele
    pagemin
    pagemax
    prixbase
    prixpagesup
    ....


    ainsi que d'autres donnée.

    Ma requette calcule le prix du livre en fonction d'un nombre de page que j'ai définie par exemple, j'effectue le calcule pour le nombre de page minimal, ensuite 40 page, 50, 60, 70, 80 et 100.

    j'affiche cela dans un tableau, vous pouvez vous à quoi ca ressemble à cette adresse :

    http://www.mon-livre-photo.fr/comparateur.php

    pour le moment lorsque j'ai fais mes test le prix de la page supplémentaire était fixe.

    Par contre en regardant de plus pres je me suis rendu compte que certain fabricant effectuaient un prix dégressif des pages supplémentaire en fonction de la quantité.

    Donc la dans ma table produit je me suis dis que le plus simple serait de de rajouter ce type de champs :
    nb30
    nb40
    nb50
    nb60
    nb70
    nb80
    nb90
    nb100

    que je renseigne à la main. Mais le je suis tombé sur un autre os, il y a des livres qui peuvent monter jusqu'a 500 pages !

    Donc ma question est : comment concevoir ma base de donnée comment verriez vous la chose ?

    Merci d'apporter votre vision des choses !
    La vie à le gout qu'on lui donne

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Citation Envoyé par mims1664
    Donc la dans ma table produit je me suis dis que le plus simple serait de de rajouter ce type de champs :
    nb30
    nb40
    nb50
    nb60
    nb70
    nb80
    nb90
    nb100

    que je renseigne à la main. Mais le je suis tombé sur un autre os, il y a des livres qui peuvent monter jusqu'a 500 pages !

    Y’en a qu’on essayé, ils ont eu des problèmes….

    Il serait préférable d’associer un Livre type avec un nombre de pages, ce qui donnerait par exemple :

    TariferLivreType (#IdLivreType, nbPagesMini, PrixMini, PrixPageSupplementaire)

    (Clé primaire soulignée, clé étrangère précédée d’un #)

    Exemple:
    nbpagesMini=26, PrixMini=29,85, PrixPageSupplementaire=1,00
    nbpagesMini=30,PrixMini=33,55, PrixPageSupplementaire=0,95
    etc…

    Soit la requête qui te calculera le prix exact d’un livre de type=1 de 53 pages.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT prixmini+(53-nbpagesMini)*PrixPageSupplementaire AS APayer
    FROM LivreType AS T
    WHERE (T.nbpagesmini=(SELECT Max(NbPagesMini) FROM LivreType WHERE
      idLivreType=T.idLivreType AND nbpagesMini<=53 ) AND T.idLivreType=1)
    Imagine les acrobaties qu’il faudrait pour chercher les tarifs parmi les colonnes nb30, nb40, nb50,…….,nb500

    Bon courage pour le site.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Le hic avec cette technique (que j'ai faite dans un premier temps ) et qu'il y a certain laboratoire qui vont diminuer le prix des pages suppélementaire, par exemple entre 5 et 10 pages supplémentaire le prix de la page suppélementaire sera de 1 € entre 10 et 20 pages supplémentaire le prix de la page sera de 0,90 € etc ...

    tu vois ce que je veux dire .... c'est pas rectiligne et c'est ca mon problème !
    La vie à le gout qu'on lui donne

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien, un produit a un prix de base et 0 à plusieurs prix pour des paquets de pages supplémentaires partant d'un nombre mini à un nombre maxi.

    On aurait donc la relation :
    Produit -0,n----Tarifer----(1,1)- PagesSupp

    Avec la table PagesSupp (PS_IdProduit, PS_PageDebut, PS_PageFin, PS_Prix)

    Quels sont les tarifs des pages supplémentaires du produit n°12 ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT PS_PageDebut, AS 'De la page'
      PS_PageFin AS 'A la page'
      PS_Prix AS Prix
    FROM PagesSupp
    WHERE PS_IdProduit = 12
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Oui on pourrait imaginer cela de cette façon CinePhil, et j'étais partit dans ce sens mais j'ai été bloqué car je n'ai pas réussi a faire ma requette qui me permettra de récupérer les infos de ma base "produit" et les tarifs des pages pour plusieurs quantités : 20, 30, 40, 50 ... 100 pages.

    je dois faire cela avec une seul requêtte pour ensuite pouvoir effectuer des trie sur les tarifs.

    En faite je vais vous exposer à l'envers le probleme.

    Donc en m'appuyant sur ta table Cinephil voici les données que l'on peut trouver dans sa base :

    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
    
    CREATE TABLE IF NOT EXISTS `pagesup` (
      `psid` int(11) NOT NULL,
      `pspagemin` int(11) NOT NULL,
      `pspagemax` int(11) NOT NULL,
      `psprix` decimal(10,2) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Contenu de la table `pagesup`
    --
    
    INSERT INTO `pagesup` (`psid`, `pspagemin`, `pspagemax`, `psprix`) VALUES
    (1, 26, 40, 1.00),
    (1, 40, 50, 0.90),
    (1, 50, 75, 0.80),
    (1, 75, 100, 0.70);
    Contenu de la table produit

    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
    CREATE TABLE IF NOT EXISTS `produit` (
      `id` int(11) NOT NULL,
      `nom` varchar(10) collate utf8_unicode_ci NOT NULL,
      `pagemin` int(11) NOT NULL,
      `pagemax` int(11) NOT NULL,
      `blabla` varchar(100) collate utf8_unicode_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Contenu de la table `produit`
    --
    
    INSERT INTO `produit` (`id`, `nom`, `pagemin`, `pagemax`, `blabla`) VALUES
    (1, 'nomprod', 26, 100, 'bla bla ');
    le but serait de pouvoir calculer les prix de chaques quantité en une seul requêtte ! car ensuite vu que j'affiche plusieurs produits je devrais etre capable d'effectuer des trie sur les tarifs en fonction de la quantité

    Je suis désolé de ne pas etre plus clair, je suis loin d'etre a l'aise avec le language SQL...

    En tout cas merci de votre aide.
    La vie à le gout qu'on lui donne

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par CinePhil
    Avec la table PagesSupp (PS_IdProduit, PS_PageDebut, PS_PageFin, PS_Prix)
    Par exemple

    Produit1…….0…..30….1,00
    Produit1…..31…..40….0,95
    Produit1…..41…..50….0,90
    Etc

    Si le produit1 fait 43 pages, le prix est donc :
    (30x1,00)+(10x0,95)+(3x0,90)

    Les 30 premières à 1,00, les 10 suivantes à 0,95 et les 3 dernières à 0,90.

    C’est bien comme ça qu’on calcule ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Non, j'ai oublié de mettre le prix de base dans une table ce qui donnerais :


    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
    CREATE TABLE IF NOT EXISTS `produit` (
      `id` int(11) NOT NULL,
      `nom` varchar(10) collate utf8_unicode_ci NOT NULL,
      `pagemin` int(11) NOT NULL,
      `pagemax` int(11) NOT NULL,
      `prixbase` double(10,2) NOT NULL,
      `blabla` varchar(100) collate utf8_unicode_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Contenu de la table `produit`
    --
    
    INSERT INTO `produit` (`id`, `nom`, `pagemin`, `pagemax`, `prixbase`, `blabla`) VALUES
    (1, 'nomprod', 26, 100, 15.00, 'bla bla ');
    le calcule serait ainsi pour 43 pages :

    15 + ((43-40)x0.90) + ((40-26)*1 )

    heuu je pense. mais alors la ca risque d'etre complexe non ?
    La vie à le gout qu'on lui donne

Discussions similaires

  1. Tarif dégressif devis
    Par Liliana78 dans le forum jQuery
    Réponses: 15
    Dernier message: 04/03/2015, 19h53
  2. Réponses: 2
    Dernier message: 28/06/2013, 11h21
  3. Multiplier les lignes selon une quantité
    Par prize270716 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/06/2013, 13h28
  4. Réponses: 11
    Dernier message: 09/10/2011, 11h23
  5. Réponses: 2
    Dernier message: 24/02/2010, 09h26

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