Hi,
wymyśliłem sobie sumowanie produktów z mojego koszyka, tylko, że mam pewien problem, bo albo za bardzo kombinuję albo źle zaprojektowałem kilka tabel. Może na początek przedstawie strukturę tabel:

Tabela z koszykiem:

  1. CREATE TABLE `basket` (
  2. `id_product_basket` INT(11) NOT NULL,
  3. `member_id` INT(11) NOT NULL,
  4. `product_id` INT(11) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Do tej tabeli dołączam jeszcze:

  1. CREATE TABLE `members` (
  2. `id_user` INT(11) NOT NULL,
  3. `username` VARCHAR(24) NOT NULL,
  4. `password` VARCHAR(50) NOT NULL,
  5. `email` VARCHAR(50) NOT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


  1. CREATE TABLE `products` (
  2. `id_product` INT(11) NOT NULL,
  3. `category_id` INT(11) NOT NULL,
  4. `product_name` text NOT NULL,
  5. `product_price` DECIMAL(10,2) NOT NULL,
  6. `product_status` tinyint(1) NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;



  1. CREATE TABLE `promo` (
  2. `id_promo` INT(11) NOT NULL,
  3. `product_id` INT(11) NOT NULL,
  4. `percent_promo` INT(3) NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Moje aktualne zapytanie:

  1. $getDataInBasket2 = $db->prepare("SELECT a.id_product, a.product_price, b.percent_promo FROM `products` AS `a`
  2. JOIN `promo` AS `b` ON a.id_product = b.product_id
  3. JOIN `basket` AS `c` ON a.id_product = c.product_id
  4. JOIN `members` AS `d`
  5. WHERE `id_user` = :member_id
  6. ");
  7. $getDataInBasket2->bindValue(":member_id", $_SESSION['id_user'], PDO::PARAM_INT);
  8. if(!$getDataInBasket2->execute()){
  9. print_r($getDataInBasket2->errorInfo());
  10. }


trochę tego dużo ale już tłumaczę jak to ma działać. Chodzi o zsumowanie wszystkich produktów z koszyka z uwzgędnieniem promocji dlatego też łączę z tabelą promo. W tabeli promo jest procent promocji na podstawie, którego "w locie" obliczam ile wynosi aktualna cena, kodem:

  1. $resultOfPromo = $basketContainer2['product_price'] / 100 * $basketContainer2['percent_promo'];
  2. $newPrice = $basketContainer2['product_price'] - $resultOfPromo;


Na podstawie pobranej ceny normalnej oraz procentu promocji powinna się wyświetlić cena promocyjna.
Aktualne zaptanie, co prawda wyświeetla cenę produktu ale tylko pierwszego z koszyka. Nie sumuje.
Jeśli ktoś się w tym połapie oraz byłby w stanie mi pomóc jak zliczyć wszystkie produkty z koszyka z uqzględnieniem promocji to będę bardzo wdzięczny.
Pozdrawiam.