mysql DISTINCT

Consultez la formation au REFERENCEMENT naturel Google de WebRankInfo / Ranking Metrics


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Jan 06, 2005 16:30

J'ai rien contre toi, The Jedi, mais si ça marche, ton truc, j'ai rien pané: avec le "group by c1.id_topo", comment la requête choisit le champ c1.id ?
Pff...

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Jan 06, 2005 16:38

Ben écoute, il m'a filé sa table, son contenu, le résultat attendu et cette requête renvoie le résultat escompté.

PS : pourquoi devrais-tu avoir quelque chose contre moi ?? o_O


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Jan 06, 2005 16:48

The Jedi a écrit:pourquoi devrais-tu avoir quelque chose contre moi ?? o_O


Bah pour rien ! Je suis juste à côté de la plaque. Pas grave. Un guronzan et ça va repartir. Passons. Mais j'ai toujours pas compris comment on peut intégrer dans un SELECT un champ qui n'est pas repris dans le GROUP BY, et qui n'est pas non plus une fonction d'aggrégation.
Pour moi:
select id_topo, max(date) from sorties group by id_topo
ça fonctionne, mais :
select id_topo, max(date), id from sorties group by id_topo
Je vois pas comment ça peut marcher.

Enfin bon, te casses pas la tête, j'irais relire de la doc à l'occasion sur le sujet. Là, ça me gave.

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Jan 06, 2005 16:53

Ben parce que tu fais un regroupement sur une clé, pas sur une colonne.
Imagine que tu aies 3 lignes de résultat
Code: Tout sélectionner
c1   c1   c3
--------------------
1   A   A
1   B   A
1   C   B


Si tu fais un group by c1, il "regroupe" les résultats par c1 et par défaut, récupère que la première ligne du lot. Ca a le même effet qu'un distinct mais en plus performant.


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Jan 06, 2005 16:59

The Jedi a écrit:Si tu fais un group by c1, il "regroupe" les résultats par c1 et par défaut, récupère que la première ligne du lot (...)


C'est une découverte pour moi. Sous Oracle, ce genre de manip ne passe absolument pas. Ce qui m'inquiète, c'est la notion de "première ligne"... Première en quoi ? Première stockée ? Première dans l'ordre de tri (éventuellement) indiqué ??

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Jan 06, 2005 17:21

Première sur l'ordre de tri. Chavais pas que sous Oracle ça marchait comme ça ;)

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Jeu Jan 06, 2005 17:29

> the jedi
Bon, ça marche pas, ton code me fait pas le bon résultat : c'est chaque fois le premier id du regroupement qui est pris, alors que je voudrais l'id qui corresponde au max(date).
Je' t'envoie mon résultat....

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Jeu Jan 06, 2005 20:23

Soution trouvée par Yan Bilik.

Yan Bilik a écrit:Tu vas rire, j'ai trouver un truc très con qui a l'air de marcher...
Code: Tout sélectionner
SELECT max(id), id_topo, max(date )  AS maxdate
FROM courses
GROUP  BY id_topo
ORDER  BY maxdate DESC , id_topo DESC, id DESC



Pourquoi ça a l'air de marcher: parceque ... par définition, le max(id) est corrélé au max(date), puisque le id est en auto-increment...


Tont con :oops:
Merci à tous les deux...


afrolatino.net
WRInaute discret
WRInaute discret
 
Messages: 66
Inscription: 27 Mai 2004

Message le Sam Jan 15, 2005 7:28

merci a Yan Bilik
moi aussi j'avais ce genre de tri a faire sur une struture identique
apres quelques heures de recherche et de lecture sur les differents tutoriaux Mysql pour trouver une solution, et voila je suis tombe sur ce topic qui m'a secouru


Bobez
WRInaute impliqué
WRInaute impliqué
 
Messages: 716
Inscription: 20 Mai 2004

Message le Sam Jan 15, 2005 15:17

Yan Bilik a écrit:Si c'est comme le 60gp (et ça doit être le cas), c'est du mysql v3. Donc pas de sous-requêtes.

Non, tu dois pouvoir basculer en mysql 4 en passant par le manager > mutualisé > ton domaine > base de données. Je l'ai fait récemment pour un 90Plan mais je crois que cette option est dispo également pour les GP. Pas de sauvegarde à faire, c'est rapide, il suffit juste ensuite de modifier le nom du serveur dans tes paramètres de connexion à la base.

Voilà qui devrait régler ton problème :wink:

EDIT: oups, j'avais pas vu que la discussion avait plusieurs pages, ton pb est déjà résolu :roll: Mais l'info peut tout de même servir !

mysql DISTINCT

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation REFERENCEMENT naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité