[ DankoH @ 11.06.2010. 19:34 ] @
Zdravo!!

Evo jedan zadatkic ako tko ima vremena da malo promozga.

Pravim neki programcic za pracenje vremena po krugovima u moto sportu i sad je zapelo. Trebam izvadit najbrze krugove (laps) iz baze ali po userima i za odredeni track_id. U laps tablici imamo vise track-ova i vise usera sa unesenim vremenima u 3 kolone (min, sec i milli) npr. 1 25 145 .
Evo, ja probavam vec satima i ne ide mi nikako.

Dosao sam do ovdje:

Code:


SELECT lap_id, user_id, track_id, min, sec, milli
FROM laps
WHERE concat(`min`, `sec`, `milli`) =
  (SELECT MIN(concat(`min`, `sec`, `milli`))
  FROM laps
  WHERE track_id = 1
 )



i to je ok za najnize tj. najbrze uneseno vrijeme.

Sad samo probao ugurat GROUP BY user_id da mi vrati najniza vremena po useru ali nema sanse:

Code:

SELECT lap_id, user_id, track_id, min, sec, milli
FROM laps
WHERE concat(`min`, `sec`, `milli`) =
  (SELECT MIN(concat(`min`, `sec`, `milli`))
  FROM laps
  WHERE track_id = 1
 )
GROUP BY user_id


ovo ne valja.

Niti ovaj pristup ne valja:

Code:


SELECT lap_id, user_id, track_id, min, sec, milli
FROM laps
WHERE track_id = 1
GROUP BY user_id
HAVING concat(`min`, `sec`, `milli`) =
  (SELECT MIN(ass) FROM
    (SELECT user_id, track_id, concat(`min`, `sec`, `milli`) as ass
    FROM laps
    WHERE track_id = 1
    GROUP BY user_id) as nesto
 )





E kad bi to na neku foru proradilo onda bi jos trebalo stavit order by concat(`min`, `sec`, `milli`)


Kako to izvaesti?

I sta mislite, jel dobro spremati vremena u 3 kolone? Mozda ima koji bolji nacin?


Hvala unaprijed!!
[ Nikola Poša @ 11.06.2010. 21:40 ] @
A možda samo ovako:
Code:
SELECT lap_id, user_id, track_id, MIN(concat(`min`, `sec`, `milli`))
FROM laps
WHERE track_id=1
GROUP BY user_id

[ DankoH @ 11.06.2010. 22:11 ] @
Code:

SELECT lap_id, user_id, track_id, min, sec, milli, MIN(concat(min, sec, milli))
FROM laps
WHERE track_id = 1
GROUP BY user_id


Ne, ovo ne radi, ne znam zasto. Dobijam neispravne podatke.

MIN(concat(`min`, `sec`, `milli`)) je ok ali ostalo nije. Niti lap_id nije dobar niti min, sec, milli..

Ne znam.
[ Nikola Poša @ 12.06.2010. 09:59 ] @
Probaj onda ovako, mada verovatno ima neko elegantnije rešenje:
Code:
SELECT lap_id, track_id, `min`, `sec`, milli, best_results.best
FROM laps AS l, 
(SELECT user_id, MIN(concat(`min`, `sec`, `milli`)) AS best
FROM laps
WHERE track_id=1
GROUP BY user_id) AS best_results
WHERE l.user_id = best_results.user_id AND concat(l.`min`, l.`sec`, l.`milli`) = best_results.best
[ Tudfa @ 12.06.2010. 10:09 ] @
Probaj ovako:
Code:
SELECT lap_id, user_id, track_id, MIN(concat(`min`, `sec`, `milli`)) as `lap time`
FROM laps
WHERE track_id=1
GROUP BY user_id,lap_id
ORDER BY lap_id, `lap time`
[ DankoH @ 12.06.2010. 10:17 ] @
Radi ko blesavo :P !!


Puno puno hvala!

Sad jos samo moram skuzit sta se tu desava i sve 5.
[ DankoH @ 12.06.2010. 10:18 ] @
@Tudfa, hvala na odgovoru ali ne ide tako.
[ rajkoBekrija @ 12.06.2010. 20:00 ] @
Pozdrav,

Ovo mora da radi
- top 10 lapova za odredjeni track

Code:
SELECT
    laps.lap_id,
    laps.user_id,
    MIN(CONCAT(laps.`min`, ':', laps.`sec`, '.', laps.`milli`)) as `lap_time`
FROM
    laps
WHERE
    laps.track_id =  '1'
GROUP BY
    laps.user_id
ORDER BY 
    `lap_time`, `lap_id`
LIMIT 10;


- najbolji lapovi po stazama
Code:
SELECT 
    lap_id,
    track_id,
    user_id,
    lap_time
FROM 
(
    SELECT
        laps.lap_id,
        laps.track_id,
        laps.user_id,
        MIN(CONCAT(laps.`min`, ':', laps.`sec`, '.', laps.`milli`)) as lap_time
    FROM
        laps
    GROUP BY
        laps.track_id,
        laps.user_id
    ORDER BY lap_time, lap_id
) AS lap_times
GROUP BY 
    track_id


ako neko ima elegantnije resenje, zaista bi me zanimalo
[ DankoH @ 13.06.2010. 08:26 ] @
g. Rajko super je ovo! Puno hvala!