select id_topo, max(date) as mdate from sorties group by id_topo order by mdate desc limit 10;
select * from sorties where id_topo = (idtoporecup) and date = (daterecup);
e-kiwi a dit:et "select distinct id_topo,id,date,comm order by date desc limit 0,10" tout simplement marche pas ?
jeroen a dit:(...)je suis [presque] sûr que l'on peut faire ça en 1 requête.....
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
e-kiwi a dit:>> il peut y voir 2 lignes distinctes avec le même id_topo
Si c'est comme le 60gp (et ça doit être le cas), c'est du mysql v3. Donc pas de sous-requêtes.jeroen a dit: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 ??
The Jedi a dit:Et pourquoi pas un GROUP BY id_topo, c'est plus rapide et moins lourd.
Yan Bilik a dit:The Jedi a dit: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...
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...jeroen a dit:y'a quoi comme version de mysql sur ovh 300GP ??
The Jedi a dit:Code: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
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
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
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
jeroen a dit:Je vois que tu cogites comme moi
J'y avais bien pensé, mais le champ maxdate est inconnu dans la table sorties....
SELECT A.ID, B.ID
FROM A
INNER JOIN B ON (B.ID = A.ID)
WHERE A.ID = 1
SELECT A.ID, B.ID
FROM A, B
WHERE B.ID = A.ID AND A.ID = 1
SELECT A.ID, B.ID
FROM A
LEFT JOIN B ON (B.ID = A.ID)
WHERE A.ID = 1
A.ID B.ID
------------------------
1 NULL
Yan Bilik a dit: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"
The Jedi a dit:pourquoi devrais-tu avoir quelque chose contre moi ??
c1 c1 c3
--------------------
1 A A
1 B A
1 C B
The Jedi a dit: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 (...)
Yan Bilik a dit:Tu vas rire, j'ai trouver un truc très con qui a l'air de marcher...
Code: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...
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.Yan Bilik a dit:Si c'est comme le 60gp (et ça doit être le cas), c'est du mysql v3. Donc pas de sous-requêtes.