mysql DISTINCT
40 messages • Page 2 sur 3 • 1, 2, 3
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Yan Bilik a écrit: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...
Exacement, et pour les récupérer il faut que je fasse une jointure sur la même table...
Je crois avoir la solution, je teste et vous tiens au courant, merci.
bon, j'ai pour l'instant ça :
SELECT s1.id_topo, max(s1.date) as maxdate, s2.id FROM sorties as s1, sorties as s2 WHERE xxxx GROUP BY s1.id_topo ORDER BY dte
xxx car je n'arrive pas à faire ma jointure entre s1 et s2 .....
Vous avez des idées ???
SELECT s1.id_topo, max(s1.date) as maxdate, s2.id FROM sorties as s1, sorties as s2 WHERE xxxx GROUP BY s1.id_topo ORDER BY dte
xxx car je n'arrive pas à faire ma jointure entre s1 et s2 .....
Vous avez des idées ???
- Code: Tout sélectionner
SELECT s1.id_topo, max(s1.date) as maxdate, s1.dte, s2.id
FROM sorties as s1
INNER JOIN sorties as s2 (on s2.id = s1.id)
GROUP BY s1.id_topo ORDER BY s1.dte
PS : pour ordonner sur un champ faut le sélectionner
jeroen a écrit:y'a quoi comme version de mysql sur ovh 300GP ??
Pour info, j'ai vu un msg sur forums.ovh.com où un client 60gp a demandé le passage en mysql v4 à OVH, ce qu'ils ont fait...
Donc ça doit être possible !
A "The Jedi": ça a l'air parfait, ta requête ! Avec un order ... desc et limit 10, c'est bon, jeroen ?
The Jedi a écrit:
- Code: Tout sélectionner
SELECT s1.id_topo, max(s1.date) as maxdate, s1.dte, s2.id
FROM sorties as s1
INNER JOIN sorties as s2 (on s2.id = s1.id)
GROUP BY s1.id_topo ORDER BY s1.dte
Ca revient au même que ce que j'avais fait : le s2.id = s1.id ne marche pas, je me retrouve avec des résultats ou le id ne correspond pas à la date (lors du regroupement du id_topo, la date celectionnée est bien correcte -> max(date), mais le champ id n'est pas bon....
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
avec ta solution , 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
je sèche...
La jointure est faite sur l'iD. Ne devrait-elle pas être faite sur ID_TOPO et DATE ?
(peut-être dois-tu ajouter s2.date et s2.id_topo au SELECT pour autoriser la jointure sur ces champs, à voir).
On va y arriver, on va y arriver...
(edit) Pas bon, le coup du s1.date dans la requête, plutôt ça:
(re-edit) Je ne maitrise pas les "inner join" et autres. Que donnerait la requête suivante:
- Code: Tout sélectionner
SELECT s1.id_topo, max(s1.date) as maxdate, s1.dte, s2.id
FROM sorties as s1
INNER JOIN sorties as s2
ON s2.id_topo = s1.id_topo and s2.date = maxdate
GROUP BY s1.id_topo ORDER BY s1.dte DESC
(peut-être dois-tu ajouter s2.date et s2.id_topo au SELECT pour autoriser la jointure sur ces champs, à voir).
On va y arriver, on va y arriver...
(edit) Pas bon, le coup du s1.date dans la requête, plutôt ça:
- Code: Tout sélectionner
SELECT s1.id_topo, max(s1.date) as maxdate, s2.id
FROM sorties as s1
INNER JOIN sorties as s2
ON s2.id_topo = s1.id_topo and s2.date = maxdate
GROUP BY s1.id_topo ORDER BY maxdate DESC
(re-edit) Je ne maitrise pas les "inner join" et autres. Que donnerait la requête suivante:
- Code: Tout sélectionner
SELECT s1.id_topo, max(s1.date) as maxdate, s2.id
FROM sorties as s1, sorties as s2
WHERE s2.id_topo = s1.id_topo
AND s2.date = maxdate
GROUP BY s1.id_topo ORDER BY maxdate DESC
Je vois que tu cogites comme moi
J'y avais bien pensé, mais le champ maxdate est inconnu dans la table sorties....
[edit]
La deuxième dersion que tu propose, c'est celle sur laquelle je bosse, et c'est exactement le même problème....
Il faut simplement selectionner le bon id...
J'y avais bien pensé, mais le champ maxdate est inconnu dans la table sorties....
[edit]
La deuxième dersion que tu propose, c'est celle sur laquelle je bosse, et c'est exactement le même problème....
Il faut simplement selectionner le bon id...
Dernière édition par jeroen le Jeu Jan 06, 2005 14:47, édité 1 fois.
Dans la 3eme syntaxe, as-tu tjs le pb de maxdate inconnu ? Si oui, où ? Dans la clause WHERE ou dans la clause ORDER BY ?
D'après la doc, tu peux ordonner selon un numéro de champ plutôt qu'un nom de champ. Donc si le maxdate bloque sur le order by, essaye un
"ORDER BY 2 DESC"
D'après la doc, tu peux ordonner selon un numéro de champ plutôt qu'un nom de champ. Donc si le maxdate bloque sur le order by, essaye un
"ORDER BY 2 DESC"
Le INNER JOIN c'est pareil que le LEFT JOIN sauf que ça te retourne une ligne uniquement si la jointure retourne un résultat des 2 côtés. Le LEFT JOIN est moins rapide mais retourne une ligne à tous les coups.
Y'a 2 tables, A et B. La table A contient la colonne "ID" et un enregistrement (1 par exemple), la B contient une colonne "ID" aussi mais est vide.
Ca te retournera que dalle parce 1 n'existe pas dans l'autre table.
C'est pareil que
mais c'est plus propre et plus rapide (moins bordélique au niveaux des WHERE, ils ne servent vraiment plus qu'à filtrer tes résultats)
Ca par contre, ça te retournera 1 ligne.
En tous cas désolé mais je comprends pas trop l'histoire de la requête, tous les éléments sont éparpillés partout et j'ai vraiment trop la flemme de tout rassembler.
Si tu me files en MP la structure de tes tables et des données, avec EXACTEMENT un exemple de résultat que t'attends je veux bien chercher de mon côté
Y'a 2 tables, A et B. La table A contient la colonne "ID" et un enregistrement (1 par exemple), la B contient une colonne "ID" aussi mais est vide.
- Code: Tout sélectionner
SELECT A.ID, B.ID
FROM A
INNER JOIN B ON (B.ID = A.ID)
WHERE A.ID = 1
Ca te retournera que dalle parce 1 n'existe pas dans l'autre table.
C'est pareil que
- Code: Tout sélectionner
SELECT A.ID, B.ID
FROM A, B
WHERE B.ID = A.ID AND A.ID = 1
mais c'est plus propre et plus rapide (moins bordélique au niveaux des WHERE, ils ne servent vraiment plus qu'à filtrer tes résultats)
- Code: Tout sélectionner
SELECT A.ID, B.ID
FROM A
LEFT JOIN B ON (B.ID = A.ID)
WHERE A.ID = 1
Ca par contre, ça te retournera 1 ligne.
- Code: Tout sélectionner
A.ID B.ID
------------------------
1 NULL
En tous cas désolé mais je comprends pas trop l'histoire de la requête, tous les éléments sont éparpillés partout et j'ai vraiment trop la flemme de tout rassembler.
Si tu me files en MP la structure de tes tables et des données, avec EXACTEMENT un exemple de résultat que t'attends je veux bien chercher de mon côté
Yan Bilik a écrit:Dans la 3eme syntaxe, as-tu tjs le pb de maxdate inconnu ? Si oui, où ? Dans la clause WHERE ou dans la clause ORDER BY ?
D'après la doc, tu peux ordonner selon un numéro de champ plutôt qu'un nom de champ. Donc si le maxdate bloque sur le order by, essaye un
"ORDER BY 2 DESC"
c'est dans le WHERE.
Que dit la doc ?
On peut utiliser un max() dans un WHERE ??
jedi >
envoyé !
Bon écoute je crois que j'ai trouvé ton bonheur
- Code: Tout sélectionner
SELECT c1.id,c1.id_topo,max(c2.date) as maxdate
FROM `courses` c1
INNER JOIN courses c2 ON (c2.id_topo = c1.id_topo)
GROUP BY c1.id_topo
ORDER BY maxdate DESC, id_topo DESC
40 messages • Page 2 sur 3 • 1, 2, 3
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 :
- Gestion des langues et des sessions en PHP / MySQL
- Passage à l'heure d'été/hiver sur un forum phpBB
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Sortie officielle de GoogleStats v2.0 !
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Le WRInaute du moment
- Interview Wikio : transcript du chat WebRankInfo
- Googlebot, le robot d'indexation de Google
- Le marketing viral au service du référencement
- Analyse du trafic généré par Google Maps (tracking)
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités




le forum