Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jeden-do-wielu i jeden reprezentant z "wielu"
erix
post 12.08.2010, 12:58:52
Post #1





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jak wygląda relacja jeden-do-wielu, to pewnie większość wie, możliwe że się mój problem już przewinął, ale po poszukiwaniach nie znalazłem innych rozwiązań niż te, które zdążyły się już osadzić w mojej mózgownicy.

Mianowicie, szukam sposobu na wyciągnięcie reprezentanta z tabeli będącej częścią "wielu" z nazwy relacji, np. tabela mieszkania i tabela mieszkańcy. Potrzebuję wyciągnąć listę wszystkich mieszkań wraz z dokładnie jednym mieszkańcem, który w nim rezyduje.

No i znane mi są dwie możliwości:
  • GROUP BY po ID mieszkania (co raczej wydajne nie będzie)
  • podzapytanie


moje pytanie: są inne opcje niż powyższe?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
cojack
post 12.08.2010, 13:30:07
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Jeżeli w tabeli łączącej mieszkańców z mieszkaniami, miałbyś kolumnę z informacją o tym czy dany mieszkaniec jest właścicielem mieszkania, to wystarczyła by taka informacja w klauzuli ON ( ... ) i pobrało by tylko jednego mieszkańca z każdego mieszkania dla każdego mieszkania. Albo próbuj jakąś daną z tabeli mieszkańców, pobrać która jest unikatowa dla poszczególnych mieszkańców danego mieszkania.

@edit
ciężko tak na sucho jak nie znasz reprezentacji tabel.

Ten post edytował cojack 12.08.2010, 13:31:26


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
erix
post 12.08.2010, 13:54:07
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale to przykładowo tylko, załóżmy:

mieszkania
Kod
+----+-------+
| ID | nazwa |
+----+-------+
|  4 | asd   |
|  5 | sda   |
|  6 | xyz   |
+----+-------+
3 rows in set (0.00 sec)

mieszkańcy;
Kod
+----+------------+----------+
| ID | mieszkanie | nazwisko |
+----+------------+----------+
|  1 |          4 | fgdfg    |
|  2 |          4 | xyyy     |
|  3 |          5 | werwer   |
|  4 |          5 | dsfgdfg  |
|  5 |          6 | ffff     |
+----+------------+----------+
5 rows in set (0.00 sec)


zwykły join
Kod
+----+-------+----+------------+----------+
| ID | nazwa | ID | mieszkanie | nazwisko |
+----+-------+----+------------+----------+
|  4 | asd   |  1 |          4 | fgdfg    |
|  4 | asd   |  2 |          4 | xyyy     |
|  5 | sda   |  3 |          5 | werwer   |
|  5 | sda   |  4 |          5 | dsfgdfg  |
|  6 | xyz   |  5 |          6 | ffff     |
+----+-------+----+------------+----------+
5 rows in set (0.00 sec)


i z pogrupowaniem:
Kod
+----+-------+----+------------+----------+
| ID | nazwa | ID | mieszkanie | nazwisko |
+----+-------+----+------------+----------+
|  4 | asd   |  1 |          4 | fgdfg    |
|  5 | sda   |  3 |          5 | werwer   |
|  6 | xyz   |  5 |          6 | ffff     |
+----+-------+----+------------+----------+
3 rows in set (0.04 sec)


Chodzi mi o ten z pogrupowaniem (ale tylko pod względem działania). winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
cojack
post 12.08.2010, 14:16:45
Post #4





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


  1. CREATE TABLE "mieszkancyMieszkania" (
  2. "idMieszkanca" INT REFERENCES "mieszkancy" NOT NULL,
  3. "idMieszkania" INT REFERENCES "mieszkania" NOT NULL,
  4. "wlasciciel" BOOLEAN DEFAULT FALSE NOT NULL,
  5. PRIMARY KEY( "idMieszkanca", "idMieszkania" )
  6. );
  7.  
  8. SELECT
  9. ...
  10. LEFT JOIN
  11. "mieszkancyMieszkania"
  12. ON
  13. ( "mieszkancyMieszkania" = ... AND "mieszkancyMieszkania"."wlasciciel" )
  14. ...;



@edit a nie kufa, fail sory to jest m-to-m czekaj bo mnie tu w pracy goni czas..

@edit2
no przecież tu zwykły DISTINCT poleci. Ale mi namieszałeś w berecie.

Ten post edytował cojack 12.08.2010, 14:20:24


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
erix
post 12.08.2010, 14:19:29
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No tak, ale chcę uniknąć tworzenia osobnej kolumny. Nieistotne jest, którego mieszkańca wybierze. Też wpadłem na coś takiego, ale zależy mi na rozwiązaniu, które działa jak GROUP BY, ale przy napotkaniu pasującego rekordu przejdzie do następnego dopasowania źródłowego, a nie katuje pomimo to, że ma już co trzeba...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zegarek84
post 12.08.2010, 14:19:43
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


HAVING...


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
erix
post 12.08.2010, 14:32:46
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. DISTINCT

skleroza nie boli, a ja kombinowałem... dry.gif

~zegarek84, ale to wciąż wymaga użycia group by.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zegarek84
post 12.08.2010, 15:15:08
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(erix @ 12.08.2010, 13:58:52 ) *
...Potrzebuję wyciągnąć listę wszystkich mieszkań wraz z dokładnie jednym mieszkańcem, który w nim rezyduje.
Więc ja źle zrozumiałem o co chodziło winksmiley.jpg


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 13:50