Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie danych COUNT(*) z GROUP BY
Forum PHP.pl > Forum > Bazy danych
Mion
Witam,
Baza zawiera tabele UserKonto i UserZdjecia

Tabela user ma pola: uid, nick
Tabela zdjęcia ma pola: idz, id_usera, nazwa, dodano, sciezka

Pytanie brzmi jakim zapytaniem bez podzapytania z CONCAT() wybrać listę userów którzy mają dodanych najwiecej zdjęć w galerii to proste:
  1. SELECT UK.nick , COUNT(*) AS ile, U.dodano, U.nazwa
  2. FROM UserZdjecia U LEFT OUTER JOIN UserKonto UK ON U.id_usera=UK.uid
  3. GROUP BY U.id_usera ORDER BY ile DESC;

ale tak by w wyniku zapyatania pojawilo się zdjećie które zostało ostatnio dodane.

Niestety dodanie warunku U.dodano DESC; nie zmienia wyniku zapytania.

Pozdrawiam
prachwal
licz w podzapytaniu, sortuj po ilości w zapytaniu głównym
Mion
Dzięki za poradę, ale widzę, że nie masz pojęcia o co chodzi blink.gif Jeśli Twierdzisz, że jest inaczej przygotuj kod zapytania SQL który zrealizuje to o co i chodzi twoim sposobem...
prachwal
mówienie że koś nie ma o czymś pojęcia - cóż, gdybyś ty miał to byś nie pytał o taki banał

  1. SELECT *, lista.FIELD_1
  2. FROM
  3. kody_new
  4. INNER JOIN (SELECT
  5. w.kod,
  6. COUNT(*) AS FIELD_1,
  7. max(w.id) AS max_id
  8. FROM
  9. kody_new AS w
  10. GROUP BY
  11. w.kod
  12. ORDER BY
  13. FIELD_1 DESC) lista ON (kody_new.id = lista.max_id)


kumasz czacze?
Mion
Oczywiście, ze to co podajesz nie działa w stosunku do mojego problemu
prachwal
co za problem przerobić?

zasada jest taka jak agregujesz to nie wyciągasz wartości, bo albo po nich agregujesz albo grupujesz, więc się za jednym zamachem nia za bardzo da , chyba że to liczba to masz min / max - ale często nie spełnia to oczekiwań
Mion
Udało się osiągnąć to co chciałem łącząc tabelę samą z sobą:

  1. SELECT U.id_usera,COUNT(*) AS ile, zdjeciowa.idz, U.zdjecie_nazwa, U.zdjecie_dodano
  2. FROM UserZdjecia U
  3. INNER JOIN
  4. (
  5. SELECT U.idz FROM UserZdjecia U
  6. WHERE U.widoczne = '1'
  7. ORDER BY U.zdjecie_dodano DESC
  8. )zdjeciowa ON (U.idz = zdjeciowa.idz)
  9. GROUP BY U.id_usera ORDER BY ile DESC;
thek
I zrobiłeś dokładnie to, o czym pisał kolega smile.gif Najpierw posortowałeś, a potem pogrupowałeś. Nie da się tego zrobić w jednym, prostym zapytaniu ze względu na kolejność działań (najpierw GROUP BY, a dopiero potem ORDER BY) i dlatego ORDER trzeba pchnąć do podzapytania albo do JOIN zanim dojdzie do grupowania.
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.