Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select + join z grupowaniem i dodatkowym limitem
Forum PHP.pl > Forum > Bazy danych > MySQL
Insert
Witam,

Nie mogę poradzić sobie z pewnym problemem. Otóż chcę wyświetlić dane z 4 tabelek.

produkty
- id
- data_dodania

statusy_produkty
- id
- produkt_id
- status_id
- data_dodania
- uzytkownik_id

statusy
- id
- przyjazna_nazwa

uzytkownicy
- id
- imie
- nazwisko
(dalsze pola)

Chcę uzyskać wszystkie dane z tych 4 tabelek, ale z takim warunkiem, aby pobrać ostatnio dodany rekord do produktu z tabelki statusy_produkty (innymi słowy ostatni status przypisany do tego produktu, ostatni rekord z tabelki statusy_produkty który ma unikalne produkt_id).

Wykonuję zapytanie, które wyciąga mi dane tak, jak chcę, ale zawsze z pierwszym statusem, ja natomiast chciałbym status ostatni. Chyba (nie jestem pewien, ale tak mi się wydaje) powinienem użyć tu podzapytania, które wyciągnie statusy do konkretnego produktu, posortuje je malejąco i będzie limitowane do maks 1 zwracanego rekordu, ale nie mam pomysłu w którym miejscu mógłbym je tu napisać:
  1. SELECT
  2. a.*,
  3. b.*,
  4. c.*,
  5. d.*
  6. FROM produkty a
  7. JOIN (statusy_produkty b) ON (b.produkt_id=a.id)
  8. JOIN (statusy c) ON (c.id=b.status_id)
  9. JOIN (uzytkownicy d) ON (d.id=b.uzytkownik_id)
  10.  
  11. GROUP BY a.id
  12. ORDER BY b.added DESC

Czy ktoś mógłby posłużyć mi wskazówką?
sci201
Czasem przydaje się odczyt tylko skrajnych rekordów, aby np. wykonać porównanie wartości w obliczeniach. Oto sposób aby pobrać tylko te dwa rekordy:

pierwszy:
  1. SELECT * FROM tabela ORDER BY kolumna LIMIT 1


ostatni:

  1. SELECT * FROM tabela ORDER BY kolumna DESC LIMIT 1

Sortuję tabelę względem wybranej kolumny raz rosnąco i raz malejąco, dzięki czemu mogę pobrać tylko jeden rekord (raz z przodu raz z tyłu).
Insert
Ja to wiem, to nie dział przedszkole smile.gif. Nie mniej dzięki za chęci, poradziłem sobie. Zrobiłem podzapytanie w warunku joina (złączyłem warunek pierwszy, czyli tabelka1.id_tabelka2 = tabelka2.id oraz warunek drugi - tabelka1.status_id = (select status_id from tabelka1...)).
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.