![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Hejka
Mam w bazie 3 tabele. 1 tabela - posiadłosci 2 tabela - dane userow 3 tabela - zlaczone id z tabela1 z id_tabela2 (jeden do wielu). Chcialbym wyswietlić raporcik taki, aby w wyniku był następujący efekt. Id tabela1 | id tabela 2 | imie tab2 | nazwisko tab 2 1 1 G P tutaj nie chcę powtarzać tego samego id drugi raz tylko dać inne dane dane z id_tabeli2 , imie i nazwisko. Przykład: DOM może mieć kilku właścicieli. Ale jest to jeden DOM = jeden ID a kilka ID wlascicieli. W SQL-u jakoś nie widzę żeby się to dało zrobić łatwo, chyba że ktoś coś podpowie. A PHP jak to wyświetlić ? Podpowiedzcie coś proszę. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 25 Dołączył: 29.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
pobierasz z bazy dane za pomocą while a następnie w while pobierasz dane z innej tabeli nie wiem czy dokladnie o to ci chodzi
-------------------- Pomogłem daj pomógł
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@Ruch Radzionków totalnie nieoptymalne rozwiązanie.
@sindbad Pobierasz jednym zapytaniem niezbędne dane. Z racji, że jeden dom moze miec wielu właścicieli, więc dane domu ci sie powtórzą - normalna sytuacja. Następnie w php grupujesz dane po domie, tam przechowujesz dane właścicieli a następne mając te dane robisz z nimi co ci się tylko podoba. Tutaj, pisałem o tym: http://nospor.pl/grupowanie-wynikow.html -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
Niby bawie się w w SQLu ale takich typowych relacji nie znalazłem.
Ale obeszlem to w taki sposób ( wykorzystam twój przykład z domem ): Tabela dom: ID, Nazwa, adres itp. Tabela wlasciciele: ID, Dom, imie, nazwisko itp. i teraz na takiej zasadzie że w kolumnie Dom przy każdym z włascicieli widniej ID domu z tabei dom. np: 1 | 3 | Jan | Kowalski 2 | 1 | Adam | Nowak 3 | 3 | Maurycy | Bąk W takim wypadku robiąc raport z włascicieli domów pobierasz sobie z tabeli dom dane koniecznie ID i np. opcjionalnie inne kolumny i po pobraniu każdego rekordu po ID domu ściągasz sobie z tabeli wlasciciele własicieli gdzie `dom` = '$id'
Coś w ten deseń. Można to też zrobic jednym zapytaniem rozległym SQL ale ja osobiście wolę porozbijać to na części i mieć wszystko przejżyste. Ten post edytował Shido 22.06.2012, 09:46:10 -------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Można to też zrobic jednym zapytaniem rozległym SQL ale ja osobiście wolę porozbijać to na części i mieć wszystko przejżyste. Może to i jest przejrzyste, ale niesamowicie mulaste.W linku opisałem metodę, która jest o niebo szybsza i może jedynie ciut mniej przejrzysta na pierwszy rzut oka -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
ok a czy ksztalt zapytania ma znaczenie ?
Mam 3 tabele. tab1 (dom) id|nazwa|nrdomu 1|dom1|20 tab2 (wlasciciel) id|imie|nazwisko|adres tab3 id_dom|id_wlascisciel 1 | 1 lacze je w tej tabeli posredniej tab3. Jak optymalnie napisac zapytanie? ( ? nospor jak to sie ma do Twojego skryptu ? Bo chyba bym go uzył. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
WE from masz 3 tabele a łączysz tylko dwie. Takie zapytanie wypluje ci masę zbędnych powtórzen bez ładu i składu.
Cytat nospor jak to sie ma do Twojego skryptu ? Normalnie, tak jak opisałem w arcie.Sorki ze tak skrótowo, ale zaraz musze leciec -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
to jak to napisac optymalnie ?
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No toć ci napisałem: skoro masz 3 tabele we FROM to masz je ze sobą połączyć a nie zostawiasz iloczyn kartezjański.
Najlepiej zrób left join
To zapytanie zrowci ci dane z tabli dom wraz z przypisanymi do nich wlascicielami. Z racji, ze do jednego domu moze byc kilku wlascicieli, to rekordy domu będą się powtarzać. I w tym właśnie momemcie musisz to obrobić w php. A jak? Dokładnie to masz opisane w arcie co ci dałem do niego linka. Więc teraz wkońcu się z nim zapoznaj, bo jest to dam dokładnie wyjaśnione i podane na przykładzie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem tak dzieka za pomocną dłoń. Doczytałem o joinach, i zaczałem je kumać.
no i ładnie wyświetla ale oczywiscie powtarza id domu wszedzie tam gdzie jest wlasciciel (wlasciciel moze miec kilka domow). zastosowanie skryptu kolegi NOSPOR fajnie by rozwiazało sprawę, ktos podpowie: Jak to zastosować dla mojego przykładu ?
i jest problem,bo wyświetla
już coś lepiej. ale zapętliłem się i nie wiem jak to ugryźć. Coś nospor poradzisz ? Ten post edytował sindbad_zeglarz 28.06.2012, 11:20:35 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
1) Chciałeś grupować po domach więc grupuj w php po domach a nie po wlascicielach
2) $cid = $row['id']; tutaj bedziesz mial id z ostatniej tabeli a ciebie interesuje id domu. wiec nie: select * a: SELECT *, dom.id domid i potem: $cid = $row['domid']; Przyłoż się troszkę do tego a nie poszedłeś na zasadzie KOPIUJ WKLEJ -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
no niby dziala dziekuję Nospor, ale jeszcze nie tak jakbym chciał.
Zrobiłem tak. SQL
Stworzenie tablicy:
pętla po tablicy:
Buduje/wynik: Nazwisko Właściciela Nowak1 - id 2 135 135 Nazwisko Właściciela Nowak1 - id 2 134 134 i na końcu błąd: Warning: Invalid argument supplied for foreach() line 78. foreach ($iloscdomkow['wlasciciele'] as $allwlasc) Nie wiem czy przez ten bład jest problem, ze powtarza nr domu. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
NIezły tu mamy burdel siostro....
Deklarujes tablice $domki = array(); ale potem używasz $dom a nie $domki Deklarujesz w indekse 'dom' => array() ale potem uzywasz wlasciciele Kod html to jakaś sieczka, np: '<li><b>'.$iloscdomkow['nazwa'].'</b><br>'; LI panie kolego zamyka sie przy pomocy </LI> a nie BR Wynik wyświetlania ma się nijak do kodu html i nawet nie próbuje go analizować bo mi włos na głowie staje ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
hejka
![]() ![]() zamieniłem domy z działkami ![]() tablica:
wyświetlenie tego: tutaj pojawia sie problem. wyświetla co prawda jeden nr działki ale: jeśli jest kilka dokumentów i do wlasciciela do jednej działki to tyle raze je dubluje ile jest dokumentów. jesli jedna dzialka ma jednego wlasciciela - wyswietla ladnie jesli jedna dzialka ma kilku wlascicieli to wyswietla ok. ---do tego momentu jest ok, ale jesli : jesli jedna dzialka ma 2 wlascicieli i po 2 dokumenty sa do do wlasciciela to wyswietla zle. przyklad: nr dzialki| wlasciciel | dokument 10/1 | heniek 1 | dok1,dok2,dok3 ------| heniek 2 | dok1,dok2,dok3 ------| heniek 3 | dok1,dok2,dok3
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No ale pokaż zapytanie. Skad mam wiedziec co tam nacudowałes
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 22:54 |