#1 před rokem

gawan
Člen
Registrovaný: 5. 5. 2006
Příspěvky: 107

MySQL hádanka – dá sa usporiadavať pred aplikovaním GROUP BY?

Príklad: máte tabuľku fotiek a pre každého usera chcem vybrať fotku s najmenšou hodnotou ‚position‘. Dá sa to urobiť v jednom selecte bez poddotazu?

<?php

// toto vyberie len minimálne position ...
SELECT  user_id, MIN(position), filename FROM photo GROUP BY user_id

// order by sa aplikuje až po group by takže to mi nepomôže
SELECT  user_id, position, filename FROM photo GROUP BY user_id ORDER BY position

// having sa tak isto aplikuje až po group by
SELECT  user_id, position, filename FROM photo GROUP BY user_id HAVING position = MIN(position)

?>

Dá sa nejako usporiadať pred aplikovaním GROUP BY?
Dá sa nejako vybrať pre každé ‚user_id‘ ‚filename‘ s minimálnym ‚position‘?

 

#2 před rokem

paranoiq
Člen
Registrovaný: 14. 11. 2006
Příspěvky: 350

Re: MySQL hádanka – dá sa usporiadavať pred aplikovaním GROUP BY?

minimální hodnoty je potřeba předvybrat a přijoinovat:

SELECT p.user_id, p.position, p.filename FROM photo p
    JOIN (SELECT user_id, MIN(position) AS position FROM photo GROUP BY user_id) USING (user_id, position)
/*GROUP BY p.user_id*/

zakomentovaná část je třeba jen v případě, že hrozí možnost více stejných position u jednoho uživatele

druhá ale výrazně pomalejší možnost je korelovaný poddotaz (viz manuál)

 

#3 před rokem

gawan
Člen
Registrovaný: 5. 5. 2006
Příspěvky: 107

Re: MySQL hádanka – dá sa usporiadavať pred aplikovaním GROUP BY?

Ďakujem, takto to robím aj ja, len som si nebol istý, či sa to nedá bez toho predvybrania.

 

Zápatí