Requête mysql avec GROUP BY

WRInaute occasionnel
Bonsoir, je voudrais faire une requête sql qui me renvoie les 10 premiers enregistrements de chaque catégorie

select * from ma_table GROUP BY genre,sousgenre ORDER BY id DESC

avec ça, j'ai le premier enregistrement de chaque sousgenre, mais je voudrais avoir les 10 premiers... ?
 
WRInaute accro
Tu peux tenter quelque chose comme:

Code:
select * from table t1 where id in (select id from table t2 where (t2.genre,t2.sousgenre)=(t1.genre,t1.sousgenre) order by id desc limit 10) order by genre,sousgenre,id desc

Mais je ne garantis pas que ça marche (et j'ai la flemme de tester, là).

Jacques.
 
WRInaute occasionnel
ok j'ai déjà vu ça une fois, mais j'ai des prob pour la syntaxe... les alias sont une notion que j'ignore, je sais que c'est pas bien d'avoir des besoins qui dépassent ses capacités... :) aide moi à progresser...

SELECT * FROM ma_table GROUP BY genre,scat

ma_table : c'est la table
genre : le genre
scat : le sousgenre

please!!! il me manque plus que ça pour mettre la nouvelle version de mon site ne ligne...
 
WRInaute accro
Ben "table" c'est ta table. t1 et t2 sont des alias, pas besoin de les modifier.

Quand tu fais une requête SQL, les tables peuvent avoir un alias, ce qui est particulièrement utile si tu fais référence plusieurs fois à la même table.

select * from table where table.toto=truc

est la même chose que:

select * from table aliasdematable where aliasdematable.toto=truc

Avec plusieurs fois la même table:

select * from table t1,table t2 where t1.champquelconque=t2.autrechampquelconque

Bref, l'alias par défaut d'une table est le nom de la table, mais tu peux choisir n'impore quel autre nom.

Il est temps d'aller lire la doc (version polie de RTFM).

Jacques.
 
WRInaute occasionnel
Je fais ça

select * from ma_table t1 where id in (select id from ma_table t2 where (t2.genre,t2.scat)=(t1.genre,t1.scat) order by id desc limit 10) order by genre,scat,id desc

et j'ai ça

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

désolé de te tenir la jambe...
 
WRInaute accro
Les limites de mysql... (j'ai l'habitude de postgresql). Et ça, ça marche?

select * from ma_table t1 where id in (select id from (select id from ma_table t2 where (t2.genre,t2.scat)=(t1.genre,t1.scat) order by id desc limit 10) x) order by genre,scat,id desc

Jacques.
 
Discussions similaires
Haut