Situacija jedan: trebao sam dohvatiti grupirano rezultate po user_id-u, tako da se prikazuje samo jedan, najbolji rezultat od svakog korisnika i da se sortiraju od većeg prema manjem.
To sam radio ovako:
SELECT user_id,MAX(rezultat) as rezultat FROM table GROUP BY user_id ORDER BY rezultat DESC LIMIT $startLimit,$numPerPage
Sad trebam to malo nadograditi… sve bi trebalo funkcionirati kao u primjeru gore samo najbolji rezultat pojedinog korisnika nije više onaj koji ima samo najveći “rezultat”, nego uz sebe mora imati i najmanji “time”.
Znači ako se za pojedinog korisnika ponavlja isti rezultat, treba uzeti onaj sa manjim time-om. Isto tako konačno sortiranje rezultata različitih korisnika bi trebalo ići po istom kriteriju.
Nažalost, to nije to …ako neki igrač ima:
rezultat 5 vrijeme 7
rezultat 5 vrijeme 4
rezultat 1 vrijeme 2
…tvoj query bi dohvatio max rezultat 5, a min vrijeme 2. Dok meni treba da dohvati onaj max rezultat sa minimalnim vremenom uspoređujući samo među vremenima kod max rezultata. Znači dobro dohvaćanje bi vratilo:
…a već sam krenuo gledati ponovno tvoj query i u čem je caka…jer sam taj pristup probao i prije nego sam pitao ovdje…a i za svaki slučaj još jednom nakon što si isto tako sugerirao.
No skužio sam kako si mogu pojednostavniti život, mogu uvesti dodatno polje u tablicu koji će imati:
vrijednost = rezultat*10000 +(9000-time)
…i onda ću moći raditi kao prije, ali po toj total vrijednosti.
Svejedno bi volio znati kako se to može riješiti na razini SQL-a.
Krenuo sam razmišljati u ovom smjeru:
SELECT Id, value
FROM Scores
WHERE value = (SELECT MAX(value) FROM Scores);
SELECT `user_id`,`rezultat`,MIN(`vrijeme`) as MinVrijeme
FROM
(SELECT `user_id`,MAX(`rezultat`) as `rezultat`,`vrijeme`
FROM `table`
GROUP BY `user_id`, `vrijeme` ) T
GROUP BY `user_id`,`rezultat`
ORDER BY `rezultat` DESC
LIMIT 0,1