Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Pobranie tylko najnowszych czasopism, grupując po id autora
Forum PHP.pl > Forum > Bazy danych
Sajrox
Witam,

Posiadam tabele "presses"

ID | USER_ID | TITLE | NUMBER | YEAR

1 | 5 | A | 6 | 2008
2 | 6 | A | 2 | 2009
3 | 6 | B | 3 | 2010


Chciałbym aby na wyjściu otrzymać czasopismo o ID 1 oraz 3 czyli tylko te najnowsze danego użytkownika.

  1. SELECT id, MAX(year), MAX(number) FROM presses GROUP BY user_id


Ale w wyniki ID mi się nie zgadzają bo otrzymuje

ID | MAX(year) | MAX(number)

1 | 2008 | 6
2 | 2010 | 3

A powinno być
1 | 2008 | 6
3 | 2010 | 3
thek
Ponieważ grupowanie następuje szybciej to tak się dzieje. Użycie klauzuli max zafałszuje wyniki ponieważ wybiera maksymalną wartość olewając resztę. Co z tego, że dając max(year) uzyskasz największą wartość roku, skoro reszta danych będzie nie pasująca do rekordu?
Nawet jeśli uzyskasz 2010 jako rok, to number nadal będzie równe 2. Wziąłem i przykład Twój wrzuciłem do bazy i zapytanie
  1. SELECT id, user_id, title, max( number ), max( years ) FROM pressess GROUP BY user_id
zwróciło mi
1 5 A 6 2008
2 6 A 3 2010
a to jest pomieszanie z poplątaniem o jakim Ci pisałem. Bo wrzuciło z pierwszego pasującego 6 oraz A, ale już potem walnęło max dla number i dla years.
Inna sprawa, że year to słowo zarezerwowane i nie powinno się go używać jako nazwa kolumny. Stąd masz byka i dlatego między innymi nie wyświetla prawidłowo. Albo wtedy używasz innej nazwy kolumny (co zrobiłem ja), albo używasz odwróconych apostrofów, czyli takiego zapisu -> `year`.
Aby zrobić to co Ty chcesz należałoby najpierw posortować rekordy po roku a dopiero potem grupować. To zaś najprościej wykonać poprzez poslanie sortowania do podzapytania w ten sposób:
  1. SELECT s.id, s.number, s.years FROM (SELECT id, user_id, years, number FROM users ORDER BY years DESC) s GROUP BY s.user_id


EDIT. Jeśli w tym roku ma kilka czasopism to w podzapytaniu jeszcze ORDER BY zmień dorzucając kolejny fragment i tworząc:
ORDER BY years DESC, number DESC
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.