Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlenie sumy zamówień których wszystkie elementy spełniają warunek
Forum PHP.pl > Forum > Bazy danych > MySQL
cos145
Baza wygląda następująco :

  1.  
  2. CREATE TABLE IF NOT EXISTS `orders` (
  3. `id` int(11) NOT NULL,
  4. `sum` decimal(10,2) NOT NULL DEFAULT '0.00',
  5. PRIMARY KEY (`id`),
  6. KEY `sdasdasd` (`id_user`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  8.  
  9. -- --------------------------------------------------------
  10.  
  11. --
  12. -- Struktura tabeli dla `order_detail`
  13. --
  14.  
  15. CREATE TABLE IF NOT EXISTS `order_detail` (
  16. `id_order` int(11) NOT NULL,
  17. `id_prod` int(11) NOT NULL,
  18. `price` decimal(10,2) NOT NULL DEFAULT '0.00',
  19. `amount` int(11) NOT NULL,
  20. PRIMARY KEY (`id_order`,`id_prod`)
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  22.  
  23.  
  24.  
  25. CREATE TABLE IF NOT EXISTS `products` (
  26. `id` int(11) NOT NULL,
  27. `name` varchar(200) COLLATE utf8_polish_ci NOT NULL,
  28. `price` decimal(10,2) NOT NULL DEFAULT '0.00',
  29. PRIMARY KEY (`id`)
  30. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  31.  
  32.  
  33. ALTER TABLE `orders`
  34. ADD CONSTRAINT `sdasdasd` FOREIGN KEY (`id_user`) REFERENCES `users` (`id`) ON DELETE CASCADE;
  35.  
  36.  
  37. ALTER TABLE `order_detail`
  38. ADD CONSTRAINT `order_detail_ibfk_1` FOREIGN KEY (`id_order`) REFERENCES `orders` (`id`) ON DELETE CASCADE;
  39.  


Załóżmy że chcę wyświetlić sumę zamówień 'wartość zamówień' tzn. order.sum , ale tylko dla zamówień w których wszystkie ! produkty zaczynają się od np. P .
Dodam że interesują mnie "wszystkie" bo wiem jak zrobić jeden lub więcej produktów w zamówieniu spełniających warunek
luckyps
  1. SELECT sum(orders.sum) JOIN order_detail ON orders.id = order_detail.id_order
  2. JOIN products ON order_detail.id_prod = products.id
  3. WHERE trim(upper(products.name)) LIKE 'P%'


Czy o to Ci chodzi questionmark.gif
cos145
Zjadłeś 'from orders'

ale bardziej chodziło mi o zapytanie
  1. SELECT o.sum FROM orders o JOIN order_detail od ON o.id = od.id_order
  2. JOIN products p ON od.id_prod = p.id
  3. WHERE trim(upper(p.name)) LIKE 'P%' GROUP BY o.id


tylko problem w tym że zostaną wyświetlone wszystkie zamówienia w których przynajmniej jeden produkt zaczyna się na p.

a wieć np. jeżeli w zamówieniu 1 będzie

1a.Produkt1 i 1b.Mąka to zostanie wyświetlone a nie powinno.

Chcę wyświetlić zamówienia w których wszystkie produkty są na P.
a więc
1a Produkt1 1b Produkt2 i 1c.Powidła

Nie pytajcie mnie tylko dlaczego akurat chce wyświetlić produkty na P. to jest tylko przykład smile.gif
Tak naprawdę chodzi o to żeby wszystkie elementy zamówienia spełniały jakiś warunek w tym przypadku jest to akurat nazwa produktu zaczynająca się na P, ale chodzi o to żeby albo wszystkie spełniały taki warunek albo żaden z nich.
YaQzi
  1. SELECT o.sum
  2. FROM orders o
  3. HAVING
  4. (
  5. SELECT COUNT(*) FROM order_detail od
  6. JOIN products p ON od.id_prod = p.id
  7. WHERE trim(upper(p.name)) LIKE 'P%'
  8. AND od.id_order = o.id
  9. ) =
  10. (
  11. SELECT COUNT(*) FROM order_detail od
  12. JOIN products p ON od.id_prod = p.id
  13. WHERE od.id_order = o.id
  14. )


że tak powiem... blink.gif
cos145
o to to to . Dzięki za pomoc.

Swoją drogą nie wiedziałem że można używać having bez użycia group by no ale działa smile.gif.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.