Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] - stan magazynowy, dane z dwóch tabel.
Cienki1980
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Mam taki mały problem. W dwóch tabelach są przechowywane dane na temat zamówionych towarów ( ilość towaru jest najbardziej interesująca ) i dane dotyczące ile danego towaru zostało kupionego.

Problem mam z zapytaniem, które by wyciągneło dane na temat produktu, ilości w magazynie ( wszystkie dostawy ) oraz ilość kupionych towarów.
  1. CREATE TABLE `towardostawa` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_towar` int(11) NOT NULL DEFAULT '0',
  4. `ilosc` int(11) NOT NULL DEFAULT '0',
  5. `nazwa` text,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
  8.  
  9.  
  10. INSERT INTO `towardostawa` VALUES (1, 1, 10, 'jogurt');
  11. INSERT INTO `towardostawa` VALUES (2, 1, 20, 'jogurt');
  12. INSERT INTO `towardostawa` VALUES (3, 2, 3, NULL);
  13. INSERT INTO `towardostawa` VALUES (4, 3, 4, NULL);
  14. INSERT INTO `towardostawa` VALUES (5, 3, 5, NULL);
  15. INSERT INTO `towardostawa` VALUES (6, 5, 10, NULL);
  16. INSERT INTO `towardostawa` VALUES (7, 2, 3, NULL);
  17. INSERT INTO `towardostawa` VALUES (8, 4, 7, NULL);
  18.  
  19.  
  20. CREATE TABLE `zakupy` (
  21. `id` int(11) NOT NULL AUTO_INCREMENT,
  22. `id_towar` int(11) NOT NULL DEFAULT '0',
  23. `ilosc` int(11) NOT NULL DEFAULT '0',
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  26.  
  27. INSERT INTO `zakupy` VALUES (1, 2, 3);
  28. INSERT INTO `zakupy` VALUES (2, 4, 1);
  29. INSERT INTO `zakupy` VALUES (3, 3, 1);
  30. INSERT INTO `zakupy` VALUES (4, 1, 5);
  31. INSERT INTO `zakupy` VALUES (5, 1, 3);


To są przykładowe dane ale bardziej chodzi o samą koncepcje.

W zapytaniu jest jeden problem natomiast, jeżeli towar występuje dwa razy w tabeli "towardostawa" to jest dwa razy sumowana ilość kupiona przez klienta.
  1. SELECT DISTINCT t.id_towar,sum(t.ilosc),sum(z.ilosc)
  2. FROM towardostawa t LEFT JOIN zakupy z ON t.id_towar=z.id_towar GROUP BY t.id_towar

Może ktoś ma jakiś pomysł jak wyciągnąć poprawne dane.

Ten post edytował Cienki1980 21.01.2007, 16:26:44
Go to the top of the page
+Quote Post
spryciula
post
Post #2





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 9.12.2006

Ostrzeżenie: (0%)
-----


dodaj do tabeli, identyfikator klienta i datę zamówienia, to pozwoli ci, wyciągać dane dotyczące interesującego Cię klienta i daty zakupy
Go to the top of the page
+Quote Post
Cienki1980
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


To co pokazałem to tylko fragment tabel, ale ten który zawiera najważniejsze dane. Mnie nie interesuje konkretny klient ... a tym bardziej data kiedy coś kupił.
Tylko i wyłącznie ile towaru było w sumie w magazynie i ile zostało kupione.

Ten post edytował Cienki1980 21.01.2007, 18:12:02
Go to the top of the page
+Quote Post
spryciula
post
Post #4





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 9.12.2006

Ostrzeżenie: (0%)
-----


  1. SELECT xxx.towar, xxx.ilosc_td, sum(z.ilosc)
  2. FROM (SELECT td.id_towar towar, sum(td.ilosc) ilosc_td
  3. FROM towardostawa td
  4. GROUP BY td.id_towar)xxx LEFT JOIN zakupy z
  5. ON xxx.towar = z.id_towar
  6. GROUP BY z.id_towar


chyba o to ci chodziło (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)


tak, będzie lepiej
  1. SELECT xxx.towar, xxx.ilosc_td, sum(ifnull(z.ilosc,0))
  2. FROM (SELECT td.id_towar towar, sum(ifnull(td.ilosc,0)) ilosc_td
  3. FROM towardostawa td
  4. GROUP BY td.id_towar)xxx LEFT JOIN zakupy z
  5. ON xxx.towar = z.id_towar
  6. GROUP BY z.id_towar


Ten post edytował spryciula 22.01.2007, 01:28:34
Go to the top of the page
+Quote Post
Cienki1980
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Bangla. Dzięki wielkie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:57