Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT MIN, druga wartosc
Forum PHP.pl > Forum > Bazy danych > MySQL
AoW
Witam,

sam nie wiem jak zaczac posta, zacmienie jakies mnie dopadlo. Mam (wydaje mi sie) banalne zadanie i mam problem:

Tabela:
  1. id czas user
  2. 1 10 1
  3. 2 11 2
  4. 3 23 2
  5. 4 12 3
  6. 5 10 3


Cel, posortowanie userow o najmniejszej wartosci i zalozeniem, ze jesli dwoch userow ma taka sama wartosc to "wyzej" bedzie ten o mniejszym ID.

Czyli wynik powinien byc taki (lp, user, czas, id):

  1. 1 10 1
  2. 3 10 5
  3. 2 11 2


Zapytanie:

  1. SELECT user, MIN(czas) AS czas, id FROM test GROUP BY user ORDER BY czas


Wynik

  1. 1 10 1
  2. 3 10 4
  3. 2 11 2


...dla usera numer 3 mysql wyswietla ID 4, a nie 5.

Pogubiłem się, proszę o podpowiedź.

mmmmmmm
  1. SELECT `user`, min(czas) AS czas FROM tabela GROUP BY 1 ORDER BY 2 DESC, 1 DESC
AoW
Cytat(mmmmmmm @ 8.11.2013, 13:15:09 ) *
  1. SELECT `user`, min(czas) AS czas FROM tabela GROUP BY 1 ORDER BY 2 DESC, 1 DESC


Dziękuję za odpowiedź, ale nie rozwiązuje to mojego problemu. Jesli dodam trzecia wartosc (ID) do zapytania
  1. SELECT `user`, min(czas) AS czas, id FROM tabela GROUP BY 1 ORDER BY 2 DESC, 1 DESC


To ID blednie jest wyswietlane.

Nie rozumiem, czemu user i MIN(czas) pobiera i sortuje porpawnie, a kolejnej wartości już nie.
mmmmmmm
Bo to jest MySQL.
AoW
Mhm, fajno, dzięki, wszystko jasne..


To pytanie zatem to kogoś, kto ma więcej ochoty, czy cierpliwości.

Czy można zrobić jedno zapytanie, aby pobrać poprawnie te trzy wartości, czy muszę najpierw robić SELECT MIN, czas, a pozniej sprawdzac w drugim SELECT'cie ID odpowiadajace posortowanym wynikom?


-----------------------------------------

Ok, chyba znalazłem rozwiązeni, które mnie satysfakcjonuje. Może się komuś przyda na przyszłość:

SELECT *
FROM (
SELECT *
FROM test ORDER BY czas ASC
) as test GROUP BY user ORDER BY czas
mmmmmmm
Ustaw sobie SQL_MODE=ANSI (czyli najbardziej SQL-owy tryb), to się przekonasz czy zapytanie się wykona. Wtedy zrozumiesz moje "Bo to jest MySQL."
A potem się poducz i wróć tu, jak napiszesz prawidłowo.
AoW
Wydaje mi się, że forum jest po to, aby choć nakreślić drogę do rozwiązania problemu. Twój pierwszy post w tym temacie był nietrafiony, bo nie dotykał sedna problemu. Twojej drugiej odpowiedzi nie będę nawet komentować, bo już to zrobiłem w mojej odpowiedzi.

Zapytanie, które podałem jako rozwiązanie mojego problemu działa. Ty chyba sugerujesz, że jest inaczej - nie wiem w zasadzie mnie to nie interesuje. A uwagi w stylu "poducz się i wróć tu..." zachowaj następnym razem dla siebie.




mmmmmmm
Widzę, że przychodzisz po gotowca. Nie chcesz się poduczyć...
To ci wyjaśnię:
1. To, że to zapytanie działa, to OK.
2. Następne tego typu wcale nie musi działać.
3. Dlatego że nie używsz SQL_MODE=ANSI, więc korzystasz z gównianego MySQL-owego grupowania, które jest zgodne z smym sobą i to chyba nie zawsze.
4. W zapytaniu z grupowaniem albo są pola po których się grupuje, albo stałe, albo funkcje agregujące. Nie ma innych. W ANSI SQL-u.
Czy więc jest `id` z twojego zapytania? Żadnym z powyższych... O * już nie wspomnę bo to totaln pomyłka...
Nie odnoś tego do siebie, bo jest tu wielu takich nieuków.
Raz to napiszę, a potem będę kopiował linka smile.gif
bpskiba
Cytat(mmmmmmm @ 9.11.2013, 09:01:38 ) *
Bo to jest MySQL.


Jednak MySQL ma wciąż wiele zalet. Ty to wiesz i ja to wiem!
Swoją drogą to..... chyba traci pozycję.............
mmmmmmm
Wg mnie MySQL ma tylko jedną zaletę: jest 3 w LAMP.
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.