Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych z kilku tabel o wspólnym polu
Forum PHP.pl > Forum > Bazy danych > MySQL
jurcio6
Witam.

Mam problem z zapytaniem, które pobierało by dane z kilku tabel (wszystkie jedno takie samo pole ale z innymi wartościami, a reszta pól jest różna), sortowało po tym polu wspólnym i zwracało je jako jedna tabela. Kombinowałem z UNION i JOIN, ale nie udało mi się uzyskać satysfakcjonującego rezultatu. Ale o co chodzi konkretnie? Przykład (pole jednakowe dla wszystkich tabel to datetime):

tabela_A
id | temperatura | wilgotnosc | datetime
1 | 25 | 60 | 2011-02-10 09:00:00
2 | 23 | 55 | 2011-02-10 10:00:00
3 | 24 | 50 | 2011-02-10 11:00:00

tabela_B
id | moc | energia | datetime
1 | 100 | 1250 | 2011-02-10 08:00:00
2 | 110 | 1300 | 2011-02-10 10:10:00
3 | 500 | 1000 | 2011-02-10 12:00:00

W zapytaniu pobieram np. z tabela_A: temperatura, wilgotnosc i chyba datetime; z tabela_B: energia i chyba datetime (nie wiem czy z obu mam pobrać itp. - spójrzmy na wyniki czego potrzebuję). Tabela wynikowa z zapytania ma być zlepkiem obu tabel, ale pole wspólne (datetime) ma mieć jedno, które zawiera wartości z obu tabel. W miejscach, gdzie nie ma danych, mogą być NULLe. Sortowanie po datetime. Ma wyglądać tak:

temperatura | wilgotnosc | energia | datetime
NULL | NULL | 1250 | 2011-02-10 08:00:00
25 | 60 | NULL | 2011-02-10 09:00:00
NULL | NULL | 1300 | 2011-02-10 10:10:00
23 | 55 | NULL | 2011-02-10 10:00:00
24 | 50 | NULL | 2011-02-10 11:00:00
NULL | NULL | 1000 | 2011-02-10 12:00:00

Proszę o pomoc w zapytaniu, bo nie mogę nic wykombinować.
trafas
Witam,

Wybierasz najpierw wszystkie rekordy z tabeli_A + połączone po dacie rekordy z tabeli B
Następnie wybierasz wszystkie rekordy z tabeli_B + połączone po dacie rekordy z tabeli A
I łączysz wyniki UNION sortując po dacie


  1. SELECT temperatura AS T, wilgotnosc AS W, b.energia AS E, a.dat_a
  2. FROM tabela_A a
  3. LEFT JOIN tabela_B b ON b.dat_a = a.dat_a
  4.  
  5. UNION
  6.  
  7. SELECT a.temperatura AS T, a.wilgotnosc AS W, b.energia AS E, b.dat_a
  8. FROM tabela_B b
  9. LEFT JOIN tabela_A a ON a.dat_a = b.dat_a
  10.  
  11. ORDER BY dat_a


Pozdrawiam.
jurcio6
Ok dzięki smile.gif

A jak wyglądała by procedura postępowania, kiedy miałbym 3 lub więcej takich tabel i chciałbym je wybrać na tej samej zasadzie co w powyższym przykładzie?
trafas
Im więcej tabel tym sprawa bardziej się komplikuje.

Nie wiem czy nie prościej dla większej ilości tabel byłoby wrzucenie wyników do tabeli pomocniczej, na niej wykonać selecta ze złożeniem po polu data i po wykonaniu zapytania tabelę pomocniczą czyścić.
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.