![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 13.03.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam pewien problem. mam 2 tabele tab1 -------- id (int), nazwa(varchar) tab2 -------- id (int), parent (longtext, wpisy w stylu "|tab1id1|tab1id2|"), nazwa (varchar) w tym tab1 i tab2 polaczone sa id-ami z tab1, czyli tab1id1 - jakis id w tabeli 1, tab1id2 - jakis inny id w tabeli 1 Teraz chce wykonac zapytanie wybierajace wszystkie id i nazwy z tabeli 1 (tab1), jednoczesnie sprawdzajac, czy istnieja te id-y w tabeli 2 (tab2.parent) Probowalem z left join, ale mi nie wychodzi. Albo zwraca wszystko z tab1 wcale nie sprawdzajac, albo wynikow mam tyle, co powinno znalezc w tab2 i powtarzajace sie nazwy z tab1, albo nic nie zwraca. oto query ktore testowalem (m. in)
i wiele innych, nic z tego. Czy jest to w ogole mozliwe? Prosze o pomoc. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 262 Pomógł: 39 Dołączył: 12.04.2004 Ostrzeżenie: (0%) ![]() ![]() |
obawiam sie ze jednym zapytaniem tego nie zrobisz, najpierw sobie wybierz parent'y z tab2 potem jakos przez explode albo cos takiego sobie zrob z tego odpowiednie zapytanie do tab1
-------------------- rm -rf /*
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 8.12.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Pobierasz id z pierwszej tabeli , pobierasz id z drugiej tabeli i je porownujesz tzn ze w drugim zapytaniu musisz dac cos takiego
[sql:1:17de0a3808] SELECT * FROM tab2 WHERE id = $id [/sql:1:17de0a3808] gdzie zmienna $id jest id pierwszej tabeli -------------------- Windsurfing -> way of my life !!!
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
[sql:1:ad84e095ff]select t1.id, t1.nazwa, IF(t2.id IS NOT NULL,1,0) as czy_istnieje from tabela1 t1 left join tabela2 t2 on (t2.parent=t1.id)[/sql:1:ad84e095ff]
:?: ew. mozna dodać na koncu [sql:1:ad84e095ff]GROUP BY t1.id[/sql:1:ad84e095ff] -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 13.03.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam
Dziekuje, to ciekawe, ale nie do konca mi o to chodzilo. Moze przedstawie to na przykładzie programu: [php:1:eb02c9697f] $www=mysql_query("SELECT * FROM tab1"); while($ww=mysql_fetch_array($www)) { $qqq=mysql_query("SELECT * FROM tab2 WHERE parent LIKE "%|".$ww['id']."|%""); if (mysql_num_rows($qqq)) { tutaj kod programu } } [/php:1:eb02c9697f] teraz chodzi o to, zeby zapytania $www i $qqq polaczyc razem, sprawdzajac jednoczesnie if i otrzymac wyniki z tab1 (id, nazwa), przy czym tylko te, gdzie w tab2 wystepuja tab1.id. Nie wiem, czy jasno sie wyrazilem. Mam nadzieje, ze tak. I jeszcze jedno, jak uzywac BBCode? Czytalem instrukcje, ale jak widzicie, nie wychodzi mi to. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
[sql:1:31400e5d5c]select t1.id, t1.nazwa from tabela1 t1, tabela2 t2 where t2.parent=t1.id group by t1.id[/sql:1:31400e5d5c]
tak? -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 13.03.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam, no niestety nie tak. Przypatrz sie prosze spenalzo co napisalem w kodzie php.
tam jest: like "%|".tab1.id."|%" |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 8.05.2002 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
A może tak?
[sql:1:3013543ab8]SELECT DISTINCT p.parent, k.* FROM tab2 p LEFT JOIN tab1 k ON p.parent=k.id[/sql:1:3013543ab8] |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 8.05.2002 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
lub tak jesli chcesz tylko sprawdzic dla kazdego rekorduw tab1:
[sql:1:444be758a2]SELECT k.*,IF(p.parent IS NOT NULL,1,0) AS czy_istnieje FROM tab1 k LEFT JOIN tab2 p ON p.parent=k.id[/sql:1:444be758a2] Pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 23:32 |