Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie danych z podzapytania
gregiolo
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


Posiadam trzy tabele:


platnosci:
platnosc | userid | kwota
1 | 1 | 10
2 | 1 | 20

produkty:
produkt | userid | nazwa
1 | 1 | "aaa"
2 | 1 | "bbb"

kategorie:
produkt | kategoria
1 | "kat1"
2 | "kat2"


Mam dane jedynie [userid].

Chciałbym utworzyć zapytanie, które przedstawi wszystkie powyższe dane jako jeden rezultat bez powtórzeń. Kombinowałem na dwa sposoby:
  1. SELECT plat.*, prod.*, kat.*
  2. FROM platnosci plat
  3. JOIN produkty prod ON plat.userid = prod.userid
  4. JOIN kategorie kat ON prod.produkt = kat.produkt
  5. WHERE plat.userid = 1 AND prod.userid = 1;


Tutaj poprawiłem na: SELECT plat.*
i również nie zadziałało, podobnie jak DISTINCT plat.*

To zapytanie działa ale duplikuje wiersze. Distinct też nie działa.

Inna możliwość to:
  1. SELECT plat.*, prod.produkt
  2. FROM platnosci plat, produkty prod
  3. WHERE plat.userid IN (
  4. SELECT DISTINCT prod.produkt
  5. FROM produkty prod
  6. WHERE prod.userid = 1)
  7. GROUP BY prod.produkt;


To działa niemal. Problem w tym, że nie wiem jak wewnątrz zrobić JOIN i na zewnątrz pobrać dane z kategorii oraz z produktu. Udalo mi sie pobrac tylko prod.produkt, jak próbuje inne opcje to nie działa.

Chciałbym aby rezultat był następujący:

platnosc | userid | produkt | nazwa | kategoria
1 | 1 | 1 | "aaa" | kat1
2 | 1 | 2 | "bbb" | kat2


Moze ktos ma lepszy pomysł.

Z góry dziekuje.

Ten post edytował gregiolo 21.04.2010, 16:31:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Kod
SELECT plat.*, prod.*, kat.*

Trudno żeby zadziałał distinct, skoro wybierasz wszystkie kolumny ze wszystkich tabel. Tzn. działa, na pewno nie masz dwóch takich samych wierszy w wyniku.

Może wyjaśnij w ogóle co rozumiesz pod pojęciem 'jeden rezulat bez powtórzeń'. Jak by nie patrzeć są tutaj dwa produkty. Jak chciałbyś je wyświetlić w jednym wierszu?

Ok. doczytałem.
A jaki wynik dostajesz z pierwszego zapytania?

Ten post edytował Mchl 21.04.2010, 16:03:12
Go to the top of the page
+Quote Post
gregiolo
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


Chciałbym wynik w dwóch wierszach dla dwóch produktów. Tak, aby wszystkie dane były wyszczególnione ze wszystkich tabel. Rezultat oczekiwany napisałem w poście poprzednim, na samym dole po edycji. Dzieki za odpowiedź.

Ten post edytował gregiolo 21.04.2010, 16:17:20
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Ale jaki wynik dostajesz z tego pierwszego?
Go to the top of the page
+Quote Post
gregiolo
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


platnosc | userid | produkt | nazwa | kategoria
1 | 1 | 1 | aaa | kat1
2 | 1 | 1 | aaa | kat1
1 | 1 | 2 | bbb | kat2
2 | 1 | 2 | bbb | kat2

przepraszam, dopisałem płatności, moja tabela w rzeczywistosci jest duzo wieksza i uprosciłem ją.

Jak wspomniałem chciałbym aby rezultat był następujący:
Bez względu na technike i sposob zapytania.

platnosc | userid | produkt | nazwa | kategoria
1 | 1 | 1 | "aaa" | kat1
2 | 1 | 2 | "bbb" | kat2

Ten post edytował gregiolo 21.04.2010, 16:40:06
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


A widzisz. No ale jak masz dwie płatności dla klienta, to na jakiej podstawie baza ma wiedzieć, która płatność, do którego produktu? Powineneś mieć w tabeli płatności odwołanie do produktu.
Go to the top of the page
+Quote Post
gregiolo
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


Masz racje! To lepsze niż konstruowanie złożonych zapytań. smile.gif
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 Aktualny czas: 20.08.2025 - 04:53