Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Lista kategorii + info z drugiej tabeli, Problem z GROUP BY
pabbito
post 16.04.2006, 15:21:55
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 26.03.2004
Skąd: Gdańsk

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


Mam takie dwie tabele:

Fotki:
- Id_fotki
- Kolejnosc
- Kategoria_id

Kategorie:
- Id_Kategorie
- Nazwa
- Kolejnosc
- Aktywna

Chciałbym uzyskać w efekcie jednego zapytania listę Nazw aktywnych kategorii wraz z ilością fotek w danej kategorii oraz Id_fotki o Kolejnosci równej najmniejszej liczbie spośród występujących w danej kategorii.

Czyli:
| Nazwa Kategorii | Id pierwszej fotki | Ile fotek w kategorii |

Zrobiłem coś takiego:
  1. SELECT k.Nazwa, f.Id_Fotki, COUNT(f.Id_Fotki) AS ile
  2. FROM Kategorie
  3. AS k
  4. LEFT JOIN Fotki AS f ON (k.Id_Kategorie = f.Kategoria_id)
  5. WHERE k.Aktywna = 1
  6. GROUP BY f.Kategoria_id
  7. ORDER BY k.Kolejnosc


I działa prawie dobrze tylko nie wiem jak zrobić, żeby f.Id_Fotki to było id fotki o najmniejszej wartości f.Kolejnosc spośród tych w danej kategorii.
Może ktoś mógłby udzielić wskazówek jak to poprawić?

Czy GROUP BY jakoś sortuje wynik? Jeśli tak to wg jakiego klucza?

Ten post edytował pabbito 17.04.2006, 16:46:28
Go to the top of the page
+Quote Post
Spike
post 17.04.2006, 17:44:23
Post #2





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 3.02.2004
Skąd: Tczew

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


  1. SELECT k.Nazwa, MIN(f.Id_Fotki), COUNT(f.Id_Fotki) AS ile
  2. FROM Kategorie
  3. AS k
  4. LEFT JOIN Fotki AS f ON (k.Id_Kategorie = f.Kategoria_id)
  5. WHERE k.Aktywna = 1
  6. GROUP BY f.Kategoria_id
  7. ORDER BY k.Kolejnosc


Ten post edytował Spike 17.04.2006, 17:44:38
Go to the top of the page
+Quote Post
pabbito
post 17.04.2006, 18:45:52
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 26.03.2004
Skąd: Gdańsk

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


No nie bardzo.

Może rozjaśnię o co chodzi. W każdej kategorii jest pewna liczba fotek. Każda ma przypisaną kolejność za pomoca liczb (integer). Chodzi o to żeby dla kazdej kategorii wybrać reprezentującą fotkę (starczy jej Id. Ale ta fotka ma być pierwsza w kolejności z danej kategorii, czyli musi mieć najmniejszą wartość f.Kolejnosc

Edit, po długich bojach:
  1. SELECT k.Nazwa, MIN(f.Id_Fotki) AS id, f.Kolejnosc, COUNT(f.Id_Fotki) AS ile
  2. FROM Kategorie
  3. AS k
  4. LEFT JOIN Fotki AS f ON (k.Id_Kategorie = f.Kategoria_id)
  5. WHERE k.Aktywna = 1
  6. GROUP BY f.Kategoria_id
  7. ORDER BY k.Kolejnosc

jednak wydaje się działać. Dopisałem tylko AS id, bo za pierwszym razem tego nie miałem i od razu nie wyszło mi to co trzeba.

Mam jednak zagwostkę: Id_Fotki jest wybierane poprawnie, tzn jest to id fotki o najmniejszej kolejnosci, jednak gdy chcę wyświetlić wartość tej kolejności to tak jaby była wzięta z innego rekordu.

Czy ktoś mógłby mi to wyjaśnić?

Ten post edytował pabbito 19.04.2006, 10:20:39
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 Wersja Lo-Fi Aktualny czas: 15.06.2025 - 19:36