Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie danych z kilku tabel o wspólnym polu
jurcio6
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
trafas
post
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

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


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.

Ten post edytował trafas 16.02.2011, 19:44:04
Go to the top of the page
+Quote Post
jurcio6
post
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


Ok dzięki (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
trafas
post
Post #4





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

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


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ć.
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: 16.09.2025 - 06:07