Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Łączenie tabel z ograniczeniem
Forum PHP.pl > Forum > Przedszkole
marrks
Witam
mam w bazie 2 tabele:
"dzialki" - w której są numery wszystkich działek
"sprzedaz" - w której są zapisywane informacje o sprzedażach działek

dzialki:

|id_dz | nr_dzialki |
| 1      | 815/2 |
| 2      | 820/1 |

sprzedaz:

| id | id_dz | cena | data_sprzedazy |
| 1 |       2 |   450 | 2010-05-15 |
| 2 |       2 |  500 | 2010-08-20 |

Jeżeli działka zostaje sprzedana to w tabeli "sprzedaz" zostaje zapisywana cena i data sprzedaży,
czyli niektóre działki będą miały kilka rekordów w tabeli sprzedaż a inne wcale
Problem polega na tym że: chcę wyciągnąć informacje o wszystkich działkach ale tak żeby dla konkretnej działki
zwracało tylko informacje o ostatniej sprzedaży (cena, data) a jeżeli działka nie była sprzedawana to żeby zwróciło null.
próbowałem takiego zapytania:

  1. SELECT * FROM dzialki AS e
  2. LEFT JOIN
  3. ( SELECT CENA, DATA_SPRZEDAZY, id_dz FROM sprzedaz) AS s
  4. ON (e.id_dz = s.id_dz


ale gdy działka była sprzedawana 2 razy to wyciąga mi tą działkę 2 razy i nie wiem jak to ograniczyć żeby każdą działkę wyciągało tylko raz z informacjami z ostatniej sprzedaży.

Proszę o pomoc.

Jak coś źle to z góry przepraszam.



thek
Ogólnie kombinujesz w dobrą stronę. Jest to left join tabeli działek z tabelą sprzedaży, ale musisz użyć grupowania po id działki. Problemem niestety jest uzyskanie proste daty i kwoty ostatniej sprzedaży. Group by przekazuje bowiem w wyniku pierwszy pasujący do złączenia rekord, a następne olewa. Aby więc to zadziałało to powinieneś tabelę sprzedaży podać mu "odwróconą" smile.gif
  1. SELECT d.*, s.CENA, s.DATA_SPRZEDAZY
  2. FROM dzialki AS d
  3. LEFT JOIN (
  4. SELECT CENA, DATA_SPRZEDAZY, id_dz
  5. FROM sprzedaz
  6. ORDER BY DATA_SPRZEDAZY DESC
  7. ) AS s
  8. ON d.id_dz = s.id_dz
  9. GROUP BY d.id_dz
Wywaliłbym niepotrzebne rzeczy z SELECTA oraz użył jakiegoś klucza PRIMARY lub jakiegokolwiek, który pozwala mi szybko odwrócić tabelę sprzedaży według kolejności od najmłodszej do najstarszej. Nie znam struktury więc użyłem tu DATA_SPRZEDAZY, choć zapewne nie masz na niej indeksu.
marrks
Wielkie dzięki wszystko mi teraz śmiga yahoo.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.