Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pobieranie danych z kilku tabel jednocześnie
Barcelona
post
Post #1





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Witam, opisze swój problem na przykładzie kas w warzywniaku bo za dużo bym miał pisania z tłumaczeniem na czym polega mój projekt.

Otóż w bazie danych mam zrobioną tabele dla każdej kasy. Wszystkich kas jest w sumie 8

Struktura przykładowej kasy:

Kasa_1 {idzakupu, idpracownika, ilosc_zakupow, waga_zakupow, data}

I tak dla każdej kasy.

Mam zrobiony formularz który dodaje te wszystkie dane do poszczególnych kas. Jednak potrzebuje teraz pobrać dane ilosc_zakupow oraz waga_zakupow ze wszystkich kas z jednego konkretnego dnia np. 2011-10-11. Następnie zsumować te wartości (tego dnia kupiono 123 jabłka o wadze 123kg (przy założeniu że jabłko waży 1kg (IMG:style_emoticons/default/smile.gif) ))

Myślałem żeby zrobić to za pomocą jednego zapytania ale zajmowało by kilometr i na dodatek nie ogarniam do końca funkcji JOIN (IMG:style_emoticons/default/sad.gif)

Prosiłbym o pomoc.
Pozdrawiam (IMG:style_emoticons/default/arrowheadsmiley.png)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Przykładowa kasa nie umożliwia zapisania co zostało zakupione. Załóżmy, że kasa to:
Kasa_1 { idzakupu, idpracownika, towar, ilosc_zakupow, waga_zakupow, data}
  1. SELECT `towar`, SUM(`ilosc_zakupow`), SUM(`waga_zakupow`) FROM (
  2. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_1` WHERE `data` = '2011-10-11'
  3. UNION
  4. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_2` WHERE `data` = '2011-10-11'
  5. UNION
  6. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_3` WHERE `data` = '2011-10-11'
  7. UNION
  8. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_4` WHERE `data` = '2011-10-11'
  9. UNION
  10. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_5` WHERE `data` = '2011-10-11'
  11. UNION
  12. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_6` WHERE `data` = '2011-10-11'
  13. UNION
  14. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_7` WHERE `data` = '2011-10-11'
  15. UNION
  16. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_8` WHERE `data` = '2011-10-11'
  17. ) `zakupy` GROUP BY `towar`


Tylko moim zdaniem cała baza jest skopana.
Go to the top of the page
+Quote Post
Barcelona
post
Post #3





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Cytat(mortus @ 20.12.2011, 22:36:03 ) *
Przykładowa kasa nie umożliwia zapisania co zostało zakupione. Załóżmy, że kasa to:
Kasa_1 { idzakupu, idpracownika, towar, ilosc_zakupow, waga_zakupow, data}
  1. SELECT `towar`, SUM(`ilosc_zakupow`), SUM(`waga_zakupow`) FROM (
  2. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_1` WHERE `data` = '2011-10-11'
  3. UNION
  4. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_2` WHERE `data` = '2011-10-11'
  5. UNION
  6. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_3` WHERE `data` = '2011-10-11'
  7. UNION
  8. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_4` WHERE `data` = '2011-10-11'
  9. UNION
  10. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_5` WHERE `data` = '2011-10-11'
  11. UNION
  12. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_6` WHERE `data` = '2011-10-11'
  13. UNION
  14. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_7` WHERE `data` = '2011-10-11'
  15. UNION
  16. SELECT `towar`, `ilosc_zakopow`, `waga_zakupow` FROM `Kasa_8` WHERE `data` = '2011-10-11'
  17. ) `zakupy` GROUP BY `towar`


Tylko moim zdaniem cała baza jest skopana.


Tak zgadzam się z tym co napisałeś że kasa nie umożliwia zapisania co zostało zapisane, ale nie wypisywałem wszystkich pól z tabeli. Znajdują się tam również towary, oraz inne ważne pola.
Napisałem tutaj, ponieważ chciałem zobaczyć w jaki sposób mogę pobrać przykładowe dane z wielu tabel.

Cytat(max_mcee @ 20.12.2011, 22:40:03 )
Nie lepiej zrobić z tego jednej tabeli ?
Potem sumować po dacie i id danej klasy ?


Teoretycznie tak, ale ostatnio dużo siedziałem nad lekturą Access'a i wyczytałem że lepiej nie pakować wszystkiego do jednego wora, tylko jedną tabele podzielić na kilka i połączyć je relacjami. I tą samą zasadę zastosowałem tutaj.

Ok, daruje sobie przenośnie i napiszę jak faktycznie wygląda moja baza i jak planuje ją "zagospodarować"

CODE
pojemniki {id_pojemnik | nr_pojemnik | waga}
pracownicy {id_pracownik | imie | nazwisko | brygada}
produkcja {id_produkcja | ilosc_szt | ilosc_wg | zmiana | sr_wg_pr | data | braki | braki_pr | brygada}
maszyna1 {id_produkcja | id_pojemnika | id_pracownik | ilosc | waga | zmiana | data | brygada}
.
.
.
maszyna8{j/w}


Jak zauważyliście nie chodzi tutaj o kasy w warzywniaku, tylko o raport produkcyjny.
Na koniec każdej zmiany z każdej maszyny spisuje raport ile i czego zostało wyprodukowane. Te informacje są zapisywane w tabeli odpowiadającej konkretnej maszynie. To mam zrobione.
Następnie muszę pobrać te wartości, zsumować je i robić na nich działania (średnia waga produktu, procent braków itd). Po tych wszystkich obliczeniach chciałbym te dane zapisać w tabeli "produkcja".

Myślę że dzięki temu będę mógł później w łatwy sposób tworzyć raporty z konkretnych dni.

Co to tego kodu powyżej to sprawdze go jutro (tzn dzisiaj (IMG:style_emoticons/default/smile.gif) ) i dam znać jak się sprawdza.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 08:10