je part donc du principe que tu as une liste de produit (verrin, barrière etc) chaque produits à un prix (un prix de base pour tous le monde viendront ensuite s'appliquer les remise par client). ;
pour faire quelques chose de propre on peu, rapidement, partir sur un MDC de ce type
MLD correspondant
avec cette modélisation tu as :
- des clients : tables existantes pour ce connecter je l'ai reprise pour la compréhension de la chose, j'ai ajouté un champ remise ( inférieur ou égale à 1, par exemple 0.5 pour 50%). ce champ est dans cette table puisque la remise est "générale". i tu veux des remise par produit et client c'est une relation (que tu peux appeler remise) entre la table client et produit (similaire a la relation detailscommande

).
- des marques (parce que tu ne vend peux être pas qu'une seule marque, j'imagine que les portes ne sont pas forcément faites par ceux qui font des interphones

)
- des catégories (de produit) ça te permet de trouver rapidement les portes ou les bornes. c'est un bon point le dynamisme de ton site tu pourra ainsi alimenter tes pages juste en insérant des données dans la base

- des produits qui ont une une catégorie, une marque, un nom, un prix etc
- des commandes
- des produits dans les commandes (detailscommande)
les relations sont simple, une fleche va de la table à laquelle on fait référence vers la table qui référence (un produit à une marque et une marque a des produits, donc dans la table produits on ajoute une référence à la marque, via la clef primaire de la table, ici idproduit).
le code SQL correspondant
CREATE TABLE produits(
idproduit int(11) unsigned Auto_increment NOT NULL ,
nom Varchar(100) NOT NULL ,
refConstructeur Varchar(50) NOT NULL ,
idcategorie int(11) unsigned NOT NULL ,
idmarque int(11) unsigned NOT NULL ,
prix decimal (9,2) NOT NULL ,
PRIMARY KEY (idproduit)
)ENGINE=InnoDB;
CREATE TABLE marques(
idmarque int(11) unsigned Auto_increment NOT NULL ,
nom Varchar(25) NOT NULL ,
PRIMARY KEY (idMarque)
)ENGINE=InnoDB;
CREATE TABLE categories(
idcategorie int(11) unsigned Auto_increment NOT NULL ,
nom Varchar(50) NOT NULL ,
description Varchar(250) NOT NULL ,
PRIMARY KEY (idcategorie)
)ENGINE=InnoDB;
CREATE TABLE clients(
idclient int(11) unsigned Auto_increment NOT NULL ,
nom Varchar(25) NOT NULL ,
prenom Varchar(25) NOT NULL ,
email Varchar(255) NOT NULL ,
motdepasse Varchar(128) NOT NULL ,
remise Decimal (3,2) NOT NULL default 1.00,
PRIMARY KEY (idclient),
UNIQUE (email)
)ENGINE=InnoDB;
CREATE TABLE commandes(
idCommande int(11) unsigned Auto_increment NOT NULL ,
datecmd Datetime NOT NULL ,
montanttotal Decimal (9,2) NOT NULL ,
idclient int(11) unsigned NOT NULL ,
PRIMARY KEY (idCommande)
)ENGINE=InnoDB;
CREATE TABLE detailsCommande(
quantite Int not null,
idproduit int(11) unsigned NOT NULL ,
idcommande int(11) unsigned NOT NULL ,
PRIMARY KEY (idproduit,idCommande)
)ENGINE=InnoDB;
ALTER TABLE produits ADD CONSTRAINT FK_produits_idcategorie_categories FOREIGN KEY (idcategorie) REFERENCES categories(idcategorie);
ALTER TABLE produits ADD CONSTRAINT FK_produits_idMarque_marques FOREIGN KEY (idmarque) REFERENCES marques(idmarque);
ALTER TABLE commandes ADD CONSTRAINT FK_commandes_idclient_clients FOREIGN KEY (idclient) REFERENCES clients(idclient);
ALTER TABLE detailsCommande ADD CONSTRAINT FK_detailsCommande_idproduit_produits FOREIGN KEY (idproduit) REFERENCES produits(idproduit);
ALTER TABLE detailsCommande ADD CONSTRAINT FK_detailsCommande_idCommande_commandes FOREIGN KEY (idcommande) REFERENCES commandes(idcommande);
quand tu veux afficher les produits avec les prix déjà remisé, pour un client connecté, c'est assez simple tu récupère le taux de remise (table clients colonne remise) et soit à l'afficgae, soit dans la requête (mieux) tu applique la remise sur le prix.
en considérant qu'a la connexion tu garde en session le taux de remise (histoire d'éviter des requêtes sql) :
select idproduit, produits.nom as nomprod, refconstructeur, prix*0.5 as px, categories.nom as nomcat , marques.nom as nommarque
from produits
join categories using(idcategorie)
join marques using(idmarque)
le 0.5 étant fixé par concaténation en php, par exemple (si la remise est dans $_SESSION['user']['remise']).
<?php
$sql = 'select idproduit, produits.nom as nomprod, refconstructeur, prix * '.$_SESSION['user']['remise'].' as px, categories.nom as nomcat , marques.nom as nommarque
from produits
join categories using(idcategorie)
join marques using(idmarque)';
?>
en une seule requête avec l'id du client en session
SELECT idproduit, produits.nom AS nomprod, refconstructeur,prix * (
SELECT remise
FROM clients
WHERE idclient = 412) AS px,
categories.nom AS nomcat, marques.nom AS nommarque
FROM produits
JOIN categories USING(idcategorie)
JOIN marques USING(idmarque)
Où 412 est l'idclient qui se trouve en session (même utilisation que mon premier exemple).
ainsi l'affichage ne dépends que la personne qui est connecté et tu n'as qu'une page.
si tu veux un exemple du principe :
http://www.lephpfacile.com/howto/1-comm ... rum-en-php c'est le même principe que l'affichage des sujets d'un forum en fonction de la catégorie.
@+
Il en faut peu pour être heureux ......