Aller au contenu

Sujets conseillés

Posté

Salut, je sais que y'a des pros qui trainent par là :whistling:

J'ai un problème de requête mysql.

Sur un site j'ai une table "sorties" (id, id_topo, date)

Je voudrais selectionner les dix sorties les plus récentes (champ date) et ayant un champ id_topo distinct.

Vous savez comment faire ???

Merci

Je pense savir qu'il faudrait faire une jointure sur 2 tables sorties, mais je vois pas comment.....

Posté

a vue de nez , ca devrait peut etre ressembler a :

select * from sorties order by date desc group by id_topo LIMIT 1, 10

Posté

impossible de récupérer le champs id ??? Depuis quand ? Je suis sur a 200% que ca le récupère aussi !

Posté

Comment est fait le group by ??

Quels sont les champs id et date qui sont conservés ??

je voudrais la date maximum, et l'id correspondant...

Pour la date, c'est simple, il suffit de faire max(date) mais pour l'id ?

Posté

Qu'appelles tu un champ id_topo distinct ?

(pour faire une requete sur les 2 memes tables, il suffit de faire :

select t1.id,t2.id from table as t1,table as t2

par exemple. )

Posté

Merci,

id_topo distinct veut dire qu'il doit être unique.

exemple avec 3 lignes (id, id_topo, date):

1 1 12 (sortie n°1 associée au topo n°1 effectuée à la date du 12)

2 2 13 (sortie n°2 associée au topo n°2 effectuée à la date du 13)

3 1 10 (sortie n°3 associée au topo n°1 effectuée à la date du 10)

Je voudrais que ça me sorte (la sortie n°3 est écrasée par la sortie n°1, car plus vieille) :

2 2 13

1 1 12

En faisant

SELECT id, id_topo, max(date) as maxdate  FROM sorties GROUP BY id_topo ORDER BY  maxdate

le champ id ne correspond pas au champ max(date). Par exemple je peux avoir (ce que je ne veux pas) comme résultat :

2 2 13

3 1 12

J'ai bien pensé faire une jointure mais comment : visiblement j'ai pas le droit de mettre s1.date=s2.max(date) car max(date) est inconnu dans s2

SELECT s1.id, s2.id_topo, s2.max(date) as maxdate  FROM sorties as s1, sorties as s2 WHERE ???  GROUP BY s2.id_topo ORDER BY  maxdate

Je vois pas là...

Et toi ??

Posté

Je ne sais pas comment est fait ta table, mais je pense que ca devrait marcher :

SELECT id, id_topo, max(date) as maxdate  FROM sorties GROUP BY id_topo ORDER BY  maxdate DESC

Comme ça, tu trieras tes dates de la plus récente a la plus vieille, au lieu du contraire... Ca devrait déjà être mieux ;)

Posté

c'est exactement l'exemple que je donnais plus haut (sans le DESC, oubli :blush: de ma part), exemple qui ne marche pas car lors du GROUP BY, le champ id conservé n'est pas forcément celui qui correspond au max(date)....

Je crais qu'il n'y ait aucune possibilité de le faire en une requête. P'têtre en deux ??

Posté

Solution :

SELECT s1.id, s2.id_topo, max(s2.date) as maxdate
FROM sorties as s1, sorties as s2
WHERE s1.id = s2.id
GROUP BY s2.id_topo ORDER BY  maxdate desc

C'est bon ? ;)

Posté

Merci .... mais non :nono: , la jointure s1.id = s2.id ne change rien au pb, ça donne exactement le même résultat que

SELECT id, id_topo, max(date) as maxdate  FROM sorties GROUP BY id_topo ORDER BY  maxdate DESC

...

Posté

C'est pas ce que tu as demandé ??

Je voudrais que ça me sorte (la sortie n°3 est écrasée par la sortie n°1, car plus vieille) :

2 2 13

1 1 12

Posté

??

Avec ton code j'obtiens

2 2 13

3 1 12

on voit que dans la deuxième ligne, l'id n'est pas le bon (c'est l'id de la sortie n°3, alors que c'est la date de la sortie n°1)

Si tu veux je te file un bout de code sql et ce que j'attends? :blush:

Peut être y verra tu plus clair...

Posté

Et comme ceci ?

SELECT id, id_topo, max(date) as maxdate
FROM sorties
GROUP BY id_topo
ORDER BY  id_topo desc,id asc

Posté

Non.

La solution toute conne, puisque id est auto-incrément

SELECT max(id), id_topo, max(date )  AS maxdate
FROM courses
GROUP  BY id_topo
ORDER  BY maxdate DESC , id_topo DESC, id DESC

Merci encore !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...