Puikiai veikia, didelis dėkui. O kodėl mano variantas neveikė? Tubut dar nelabai gerai suprantu, kaip veikia tas group by ir order by.

Galvoju taip: group by sudaro grupes su vienodom tam tikro laukelio reikšmėm, o order by surikiuoja duomenis tose grupėse pagal kažkokią dar kitą laukelio reikšmę.

Mano užklausoje turejo vykti taip: sudaromos grupės pagal foto.kieno. Ir iš kiekvienos tos grupės imamas didžiausias grupės foto.id. O rezultatai surašomi pagal va šitaip atrinktų įrašų foto.id mažėjančia tvarka (desc).

Bet kodėl pagal šitą principą nesuveikė mano antra užklausa? O gal aš klystu ir viskas vyksta visai ne taip?

Tikslas yra išdėstyti naujausias nuotraukas, mažėjančia tvarka pagal naujumą, bet kad nesikartotų tie patys dalyviai.

Tarkime, Jonas ir Petras atsiuntė po 10 nuotraukų, bet sąraše "Naujos foto" turi matytis tik dvi foto - naujausia Jono foto ir naujausia Petro foto. Ta, foto, kuri buvo atsiusta veliau (tai yra, kurios id didesnis) turi buti pirma.

ši užklausa veikia gerai:

select max(id) maxid, kieno from foto where statusas='0' or statusas='2' group by kieno order by maxid desc limit 50

Tačiau man reikia duomenų ir iš dalyvio lentelės, todėl aš mėginu taip:

select dalyviai.id, dalyviai.vardas, dalyviai.gimdata, max(foto.id) maxid, foto.failas from dalyviai, foto where dalyviai.id=foto.kieno and (foto.statusas='0' or foto.statusas='2') group by foto.kieno order by maxid desc limit 50

Bet antrosios užklausos rezultatai jau nesutampa su pirmosios. Lengviausias sprendimas būtų ciklo viduje rašyti antrą užklausą, kuri paimtų dalyvio duomenis. Bet norisi visa tai padaryti vienoje užklausoje. Ką darau ne taip? Dėkoju už atsakymą.

$gim='1981-04-28';

$amzius=date('Y')-substr($gim, 0, 4); if (substr($gim, 5)>date('m-d')) { ++$amzius; }

štai tokį būdą sugalvojau, bet gal yra geresnių, greitesnių?