Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SELECT MIN, druga wartosc
AoW
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.08.2005

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


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ź.

Go to the top of the page
+Quote Post
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT `user`, min(czas) AS czas FROM tabela GROUP BY 1 ORDER BY 2 DESC, 1 DESC
Go to the top of the page
+Quote Post
AoW
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.08.2005

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


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.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Bo to jest MySQL.
Go to the top of the page
+Quote Post
AoW
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.08.2005

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


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

Ten post edytował AoW 9.11.2013, 13:10:43
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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.

Ten post edytował mmmmmmm 9.11.2013, 15:00:34
Go to the top of the page
+Quote Post
AoW
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.08.2005

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


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.




Go to the top of the page
+Quote Post
mmmmmmm
post
Post #8





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bpskiba
post
Post #9





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


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ę.............
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #10





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Wg mnie MySQL ma tylko jedną zaletę: jest 3 w LAMP.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 00:40