Grupowanie wielu wpisów po datach

0

Jak zapisać poprawnie w SQL PHP grupowanie wielu wpisów po datach?

Mam coś takiego:

$zapytanie = "SELECT * FROM $tabela GROUP BY YEAR(data) ORDER BY czas";

Ale to wycina tylko jeden wpis z każdego roku (i to ten najwcześniejszy) a nie wszystkie wpisy.
Próbowałem tak:

SELECT * FROM
(
SELECT * FROM newsy ORDER BY czas
) ORDER BY YEAR(data) AS dupa

konsola SQL chce aliasu, to mu wpisałem i nadal jest błąd:

#1248 - Every derived table must have its own alias
3

Uczysz się na gównianym MySQL-u, który trochę inaczej (domyślnie) obsługuje grupowanie.
Żelazna zasady przy grupowaniu:

  1. po SELECT mogą być tylko STAŁE, KOLUMNY (wyrażenia) po których GRUPUJESZ i AGREGATY. Nic więcej.
  2. Jeśli w SELECT dałeś jakieś kolumny bez funkcji agregujących, to MUSZĄ być po tym grupowania. Czyli muszą wystąpić w GROUP BY. (ale mogą w GROUP BY być również inne pola, nieuwzględnione w SELECT, choć moim zdaniem jest to bezsensowne)
  3. W ORDER BY mogą znależć się tylko rzeczy , które wypisałeś po SELECT.
    SELECT data, sum(kwota) FROM tabela GROUP BY month(data) - nieprawidłowe, brakuje w GROUP BY data
    SELECT data, sum(kwota) FROM tabela GROUP BY data, month(data) ORDER BY id_sprzedawcy - nieprawidłowy ORDER BY
    SELECT data, sum(kwota) FROM tabela GROUP BY data, month(data) ORDER BY data - prawidłowe

Karane obcięciem ręki powinno być używanie * przy zapytaniach grupujących (za wyjątkiem Count(*) :) )

0

No i dalej nie wiem jak to zrobić :(

0

może podaj najpierw jak wyglądają tabele, jakie mają przykładowe dane i jaki wynik dla tych przykładowych danych chcesz uzyskać

1
youmound napisał(a):

Jak zapisać poprawnie w SQL PHP grupowanie wielu wpisów po datach?

Mam coś takiego:

$zapytanie = "SELECT * FROM $tabela GROUP BY YEAR(data) ORDER BY czas";

Ale to wycina tylko jeden wpis z każdego roku (i to ten najwcześniejszy) a nie wszystkie wpisy.

Czy pisząc 'grupowanie' nie masz na myśli czasami zwyczajnego sortowania?
Bo zakładając, że kolumna published jest typu DATETIME to zwrócenie danych posortowanych wg rok->miesiąc->dzień->godzina->minuta->sekunda ogranicza się do

SELECT * FROM mytable ORDER BY published DESC;
0

Pozwolę sobie stawić, pomocne rozwiązanie @Marcin.Miga

SELECT *, YEAR(Data) As rok FROM $tabela ORDER BY YEAR(Data), czas DESC
  • drobna poprawka w kodzie :) Sprawdzenie czy ROK był już katalogowany jeżeli tak nie powtarza się jego stylu ... czyli wszystko mieści się w takiej ramie jak chciałem, czyli z katalogowanie wg klucza w grupie ROK

[2018]
czas największy
czas mniejszy
czas jeszcze mniejszy
[2017]
czas największy (z datą 2017)
czas mniejszy (z datą 2017)

itd. :)

Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1