Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych z podzapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
gregiolo
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.
Mchl
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?
gregiolo
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ź.
Mchl
Ale jaki wynik dostajesz z tego pierwszego?
gregiolo
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
Mchl
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.
gregiolo
Masz racje! To lepsze niż konstruowanie złożonych zapytań. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.