Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql]rozbudowane zapytanie, używanie kilku danych z róznych tabel, oraz zamiana
simo_n
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 9.09.2006

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


Buduję sobie stronę www i mam problem. Nigdy nie robiłem trudnych, czy długich zapytań do bazy.

Chcę zrobić, żę łączy mi się z jedną tabelą, pobiera z niej kilka danych, wśród nich ID, ten numer przesyła do kolejnej tabeli, gdzie do przypisanego ID jest dodana odpowiednia zawartość w polu numerID, i z niej wyciąga odpowiednie dane. Następnie z pierwszej tabelki i z drugiej pobiera odpowiedni numerID (np. 10 i 11) oraz sprawdza w trzeciej tabelce, jakie dane są przyporządkowane tym numerom, i dopiero wtedy wyświetla wszystkie dane.

Budawa tabel:
Kod
Tabela 1
pr_tab1

--------------------------------------
|ID| NumerID| Tresc1| Tresc|
----------------------------------
|1 | 10  |Lol   | brak    |
|2 | 14     |xxx  | przyklad  
|3 | 10     |roftl | przyklad2 |
|4 | 57    |zip   | xxx        |
|5 | 35    |brak| i tak dalej  |
-------------------------------------

Tabela 2

ID | NumerID
1   | 15
2  |  14
3 |35
4 |57
5| 1

Tabela 3

NumerID | Nazwa
10  | Lol
35  | Adam
31  |  Polska
38  | Pilka
4   | Temat



Nie chcę gotowych skryptów, jedynie linki (najlepiej na polskie strony) oraz jakieś przykłady, a sam spróbuję to jakoś złożyć.


Szukałem na forum podobnych problemów, ale znalazłem wyłącznie z 2 tabel i bez takich problemów" jak moje.
Z góry dziękuje za pomoc/

Ten post edytował simo_n 11.10.2007, 18:38:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
faster
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 9.09.2002
Skąd: Pszczyna

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


jakie zależności są pomiędzy tymi tabelami. Opisz może co jest w jakiej tabeli bo wydaje mi się, że można to zrobić jednym zapytaniem łączącym

select * from tabela1 t1, tabela2 t2, tabela3 t3
where t1.id=t2.id
and t2.numerID=t3.numerID
and ..... tutaj podajesz dalsze ograniczenia

nie wiem tylko dlaczego numerID powtarza się we wszystkich 3 tabelach

można również użyć klauzuli left outer join jeżeli rekordy w tabeli 1 nie muszą mieć odpowiedników w tabelach 2 i 3
za mało napisałeś celem wyjaśnienia problemu

pozdro

Ten post edytował faster 11.10.2007, 20:33:18
Go to the top of the page
+Quote Post
Zick4
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 12.10.2007

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


Cytat
select * from tabela1 t1, tabela2 t2, tabela3 t3
where t1.id=t2.id
and t2.numerID=t3.numerID
and ..... tutaj podajesz dalsze ograniczenia

Jest pewna konwencja, że WHERE służy do wybierania wierszy, natomiast warunki łączenia podaje się gdzie indziej w klauzuli ON
  1. SELECT *
  2. FROM tabela1 t1 JOIN tabela2 t2 JOIN tabela3 t3 ON t1.id=t2.id AND t2.numerID=t3.numerID AND ..... tutaj podajesz dalsze ograniczenia

Albo lepiej według mnie
  1. SELECT *
  2. FROM tabela1 NATURAL JOIN tabela2 NATURAL JOIN tabela3

To "przekazywanie" stosuje się właśnie w taki sposób, że tabele łączy się jedna obok drugiej, no ale w taki sposób, aby sobie odpowiadały (tabelka1.id_pracownika = tabelka2.id_pracownika). Automatycznie zajmuje się tym natual join i ja własnie go stosuje jednak np. jeżeli mamy "warunki inne", które mają np. w postgresie musiałem zrobić
  1. tabelka1 JOIN tabelka2 ON tabelka1.plan_rok = date_part('year', tabelka2.wydatek_data) AND tabelka1.id_pracownika = tabelka2.id_pracownika

zamiast zwyklego NATURAL JOINa, bo one akurat sobie nie odpowiadały. I teraz utworzyliśmy jedną dłuuuuga tabelkę, no ale nie chcemy wszystkiego wyświetlać prawda? Więc SELECTem wybieramy tylko te kolumny, które nas interesują.
W Twoim wypadku będzie to:
  1. SELECT subject, body, ID_MEMBER
  2. FROM for1loxx NATURAL JOIN for1loxx_x NATURAL JOIN for1loxx_u

Swoją drogą może lepiej trochę nazywaj te tabelki, bo są nazwa niczego nie mówi. Mój znajomy jest jeszcze lepeszy i zmienne, tabelki i wszystko inne nazywa w, pw, wf itd. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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.09.2025 - 23:22