![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Podaj struktury tabel i przykładowe dane, na sucho, ciężko cokolwiek poradzić.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
O ile się niemyle to poczytaj sobie o union all select z mysql, dzięki temu możesz pobierać dane z kilku tabel. Całkiem łatwo.
Tutaj masz coś o tym http://www.php.rk.edu.pl/w/p/pobieranie-rekordw/ A tak wygląda Kod SELECT pole FROM tabela UNION ALL SELECT pole FROM tabela
Ten post edytował ExPlOiT 11.10.2007, 19:12:41 |
|
|
![]()
Post
#4
|
|
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 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Numery id się powtarzają bo każda tabela ma osobne rekordy którym jest nadawany numer id
Cytat 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 Bo można. prosty przykład: Kod SELECT `imie`,`nazwisko` FROM autor UNION ALL SELECT `ksiazka`,`tytul` FROM ksiazki, UNION ALL SELECT `cena` from cennik itd gdybym znał budowe Twojej bazy byłoby dużo łatwiej mi to opisać i pokazać gotowe polecenie.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 9.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
tabela 1" for1loxx
+----+-------------------------+ | ID_PM | ID_MEMBER_FROM |SUBJECT|BODY +----+-------------------------+ | 1 | 1 | tylko raz wyciągana|tylko raz wyciągana | 2 | 2 8 |tylko raz wyciągana|tylko raz wyciągana | 3 | 45 |tylko raz wyciągana|tylko raz wyciągana | 4 | 15 |tylko raz wyciągana|tylko raz wyciągana +----+-------------------------+ Z tej tabeli pobiera dane, ID_PM przesyła do tabeli nr 2, natomiast ID_MEMBER_FROM przesyła do tabeli numer 3, do wartości ID_MEMBEr tabela 2: for1loxx_x +----+-------------------------+ | ID_PM | ID_MEMBER| +----+-------------------------+ | 1 | 23 | | 2 | 9 | | 3 | 6 | | 4 | 12 | +----+-------------------------+ Tu znajdują się tylka dwi wartości, które chcę wyciągnąć/ Gdy zostanie przekazane ID_PM chcę, aby został wybrany przypisany numer ID_MEMBER, a następnie przesłany do tabeli 3 3 tabela: for1loxx_u +----+-------------------------+ | ID_MEMBER | NAMe| +----+-------------------------+ | 29 | LOL | | 3 | ROFTL | | 47| XXX| | 18| WSAD | +----+-------------------------+ Do każdego numeru ID_MEMBER ma wyświetlić nazwe NAME Przy wyświetlaniu chcę, aby wyświetliło mi: subject i body( które mają przypisane wartośći, tekstowe) , oraz numer ID_MEMBER odpowiednio dopasowane. Ten post edytował simo_n 11.10.2007, 21:10:06 |
|
|
![]()
Post
#7
|
|
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
Albo lepiej według mnie
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ć
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:
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. ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 09:30 |