mysql DISTINCT

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

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 passionné
WRInaute passionné
 
Messages: 506
Inscription: Lun Nov 29, 2004 8:59

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: 13817
Inscription: Mar Déc 23, 2003 9:04

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: Mar Jan 13, 2004 19:24

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 passionné
WRInaute passionné
 
Messages: 506
Inscription: Lun Nov 29, 2004 8:59

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: 13817
Inscription: Mar Déc 23, 2003 9:04

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 accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

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: Ven Sep 24, 2004 13:57

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: 13817
Inscription: Mar Déc 23, 2003 9:04

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 passionné
WRInaute passionné
 
Messages: 506
Inscription: Lun Nov 29, 2004 8:59

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 accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

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 passionné
WRInaute passionné
 
Messages: 506
Inscription: Lun Nov 29, 2004 8:59

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 passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

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 passionné
WRInaute passionné
 
Messages: 506
Inscription: Lun Nov 29, 2004 8:59

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: 13817
Inscription: Mar Déc 23, 2003 9:04

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

Formation recommandée sur ce thème :

Formation Référencement 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: Lôrenb et 0 invités