PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
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‘?
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)
Ďakujem, takto to robím aj ja, len som si nebol istý, či sa to nedá bez toho predvybrania.