Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Pobranie danych z podzapytaniem
Siner
post 19.02.2008, 16:28:55
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


Chciałbym pobrać dane z kilu tabel. Dokładniej chodzi o taki przypadek, że mam takie tabele: użytkownik, grupa, uzytkownik2grupa. Jednym zapytaniem chciałbym wyciągnąć dane o użytkowniku ale także wszystkie dane o grupach do których należy.
Na razie tak kombinowałem:
  1. SELECT uzytkownik. * , grupa. *
  2. FROM uzytkownik LEFT JOIN grupa ON uzytkownik.uzytkownikId = (SELECT uzytkownik2grupa.grupaId FROM uzytkownik2grupa WHERE uzytkownik2grupa.uzytkownikId = 1)

Ale średnio mi to wychodzi.♦


--------------------
Go to the top of the page
+Quote Post
Kicok
post 19.02.2008, 17:57:05
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat
  1. ... ON uzytkownik.uzytkownikId = (SELECT uzytkownik2grupa.grupaId FROM ...


Tu jest błąd. Porównujesz ID użytkownika do ID grupy, a powinieneś ID grupy do ID grupy.


PS. Ja bym to rozbił na 2 oddzielne zapytania: pierwsze do pobrania informacji o użytkowniku (jeden wiersz), a drugie do pobrania informacji o wszystkich grupach do których należy (wiele wierszy)


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
nevt
post 19.02.2008, 19:48:47
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


  1. SELECT * FROM uzytkownik LEFT JOIN uzytkownik2grupa USING (uzytkownikId) LEFT JOIN grupa USING (grupaId);


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Siner
post 19.02.2008, 20:58:56
Post #4





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


@Kicok
racja zrobiłem błąd przy przepisywaniu, robiłem to z takim podzapytaniem:
  1. (SELECT uzytkownik2grupa.uzytkownikId FROM uzytkownik2grupa WHERE uzytkownik2grupa.uzytkownikId = 1)

@nevt
gdzieś w google znalazłem "Klauzuli USING używamy jeśli warunkiem łączenia tabel są pola które maja taką samą nazwę, czyli jest to skrócony zapis poprzedniego zapytania z klauzulą ON." Więc chyba niekoniecznie da się tak rozwiązać.


--------------------
Go to the top of the page
+Quote Post
nevt
post 20.02.2008, 01:20:38
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


a spróbowałeś chociaż, czy działa? czy na wszelki wypadek zasłoniłeś sie od razu googlem?
w twoim kodzie jest:
uzytkownik.uzytkownikId .... uzytkownik2grupa.grupaId ... uzytkownik2grupa.uzytkownikId ....
więc na pewno uzytkownikId jest o bu tabelach... założyłem, że analogicznie masz z grupaId ... jeżeli ci się nie podoba USING przerób to na klauzulę ON - to chyba nie problem?
nie pokazałeś struktury swoich tabel, to przynajmniej nie miej pretensji, że nie udało mi się jej poprawnie odgadnąć

Ten post edytował nevt 20.02.2008, 01:22:11


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
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: 14.08.2025 - 00:22