mysql DISTINCT

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

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

mysql DISTINCT

Message le Mer Jan 05, 2005 12:52

Salut,
J'ai un problème de requête mysql.
Sur mon site -www j'ai une table "sorties" (id, id_topo, date, com)

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

Vous savez comment faire ???

Merci


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

Message le Mer Jan 05, 2005 13:20

Si tu es sous mysql en version < 4, tu ne peux pas faire de sous-requetes.
Alors il faut probablement (pas sûr), commencer par une requete du type:
Code: Tout sélectionner
select id_topo, max(date) as mdate from sorties group by id_topo order by mdate desc limit 10;

Puis la parser et requêter pour chaque ligne obtenue un truc dans le genre:
Code: Tout sélectionner
select * from sorties where id_topo = (idtoporecup) and date = (daterecup);


Mais il y a peut-être mieux... Et surtout, ça ne marche que si il y a un seul enregistement pour un id_topo et date donnés...


e-kiwi
Modérateur
Modérateur
 
Messages: 15541
Inscription: 23 Déc 2003

Message le Mer Jan 05, 2005 13:23

et "select distinct id_topo,id,date,comm order by date desc limit 0,10" tout simplement marche pas ?

yacapa
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 13 Jan 2004

Message le Mer Jan 05, 2005 13:26

select distinct id_topo, id, date, comm order by date

ça devrait marcher comme ça non?
:lol: e-kiwi a poster avant moi, oups


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

Message le Mer Jan 05, 2005 13:27

Je ne pense pas: si il a plusieurs ID par ID_TOPO...
En fait, jeroen, tu devrais nous dire quelles sont les contraintes et index sur ta table (clé primaire, unique keys)...


e-kiwi
Modérateur
Modérateur
 
Messages: 15541
Inscription: 23 Déc 2003

Message le Mer Jan 05, 2005 13:31

non id doit etre sa clé, donc unique, id topo la clé de la table topo ? ca doit etre pour ... hhm... faire un topo :-)
oui colle la requete de création de ta base (tu peux la sortir avec phpmyadmin)

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

Message le Mer Jan 05, 2005 13:57

e-kiwi a écrit:et "select distinct id_topo,id,date,comm order by date desc limit 0,10" tout simplement marche pas ?


Je crois que le distinct ne s'applique pas à un champ unique mais à toute la ligne, donc ça ne marche pas (il peut y voir 2 lignes distinctes avec le même id_topo).

id est unique (autoincrément)
id_topo n'est pas unique et fait référence au champ id (unique : autoincrément) de la table topos

Vous avez des idées ?
je suis [presque] sûr que l'on peut faire ça en 1 requête.....

pascal_
WRInaute discret
WRInaute discret
 
Messages: 97
Inscription: 24 Sep 2004

Message le Mer Jan 05, 2005 15:09

select distinct id_topo, id, max(date ) as theDate
from sorties
group by id_topo
order by theDate DESC

à tester :wink:


e-kiwi
Modérateur
Modérateur
 
Messages: 15541
Inscription: 23 Déc 2003

Message le Mer Jan 05, 2005 15:33

>> il peut y voir 2 lignes distinctes avec le même id_topo

plus haut ->

>> ayant un champ id_topo distinct.

tu veux des id_topo distinct ou bien ?

c est pas clair. colle la structure de ta pages et qques enregistrements en exemple si tu veux qu'on t aide. faire du SQL sans connaitre la table cé pas simple


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

Message le Mer Jan 05, 2005 15:43

jeroen a écrit:(...)je suis [presque] sûr que l'on peut faire ça en 1 requête.....


Ah ben des idées, j'en ai plein :)
Par exemple, ça, ça marche très bien:
Code: Tout sélectionner
select tb1.*
from
sorties as tb1,
(select id_topo, max(date) as mdate from sorties group by id_topo order by mdate desc limit 10) as tb2
where tb1.id_topo = tb2.id_topo
and tb1.date = tb2.mdate

Mais il faut un mysql v4.0 !!

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

Message le Mer Jan 05, 2005 16:02

e-kiwi a écrit:>> il peut y voir 2 lignes distinctes avec le même id_topo


c'est ce que me fournirait sa solution, et c'est ca que je ne veux pas (je veux un id_topo distinct)

@ Yan Bilik
Y'a plus simple, en déclarant 2 fois la table et en faisant une jointure par exemple ??
y'a quoi comme version de mysql sur ovh 300GP ??


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

Message le Mer Jan 05, 2005 16:13

jeroen a écrit:Y'a plus simple, en déclarant 2 fois la table et en faisant une jointure par exemple ??
y'a quoi comme version de mysql sur ovh 300GP ??

Si c'est comme le 60gp (et ça doit être le cas), c'est du mysql v3. Donc pas de sous-requêtes.
Concernant la jointure, c'est évidemment de ce côté qu'il faut regarder, mais là, comme ça, je ne sait pas trop comment faire.
Peux-tu déjà confirmer qu'avec un id_topo et une date donnés, on n'obtient qu'un seul enregistrement ?

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

Message le Mer Jan 05, 2005 16:36

Et pourquoi pas un GROUP BY id_topo, c'est plus rapide et moins lourd.


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

Message le Mer Jan 05, 2005 16:39

The Jedi a écrit:Et pourquoi pas un GROUP BY id_topo, c'est plus rapide et moins lourd.


A mon avis, c'est parce qu'un simple group by id_topo (avec un max(date) comme je lui suggérais plus haut) ne lui retourneras pas les ID.
Enfin, à lui de dire...


e-kiwi
Modérateur
Modérateur
 
Messages: 15541
Inscription: 23 Déc 2003

Message le Mer Jan 05, 2005 17:21

eh beh tu fais la requete sans te soucier des distinct, et tu gere ca en php au pire si tu y arrives pas :-)

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 0 invités