Aller au contenu

Mysql Complexe...


Compte supprimé

Sujets conseillés

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.....

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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. )

Lien vers le commentaire
Partager sur d’autres sites

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 ??

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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 ??

Lien vers le commentaire
Partager sur d’autres sites

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 ? ;)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

??

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...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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