Encore une histoire de doublons ! ... mais plus compliqué ... :( [Résolu]

Signaler
Messages postés
10
Date d'inscription
samedi 12 juillet 2008
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
10
Date d'inscription
samedi 12 juillet 2008
Statut
Membre
Dernière intervention
25 juillet 2008
-
Me voila encore avec un histoire de doublons ^^

Grace a Yann_lo_san, j'ai fais la découverte de DISTINCT (quel bel outil :p) Depuis j'ai découvert GROUP BY au effet quasi similaire ^^

enfin voila .... je vous réprésente vite fait ma table :p

ID       titre                      clan       num_ep     date
1      Code Quantum       [CG]         1           1216575000   
2      Sliders                    [SF]          1           1216575001
3      Code Quantum       [CG]         2           1216575002
4      The Simpsons         [CG]         1           1216575003
5      Heroes                   [SF]          1           1216575004
...

Date sont des timestamp dans un champ BIGINT pour infos, la j'ai mis nimp c'est pour vous montrer
Sur mon site, les gens peuvent ajouter les épisodes si ils ont les infos nécessaire pour remplir la BDD (les autres champs que je n'ai pas marqué)
Sur la page index, je veux faire un cadre permettant d'afficher le dernier ajout de chaque Clan, j'ai donc tenté en vain différente requete... je vous en donne quelques unes que j'ai essayé :

> SELECT * FROM episodes GROUP BY team WHERE date='max(date)'
> SELECT DISTINCT (clan), titre, num_ep, mes_autres_champs FROM episodes ORDER BY date DESC
...
enfin voila j'ai tenté un peu tout ce que j'ai trouvé sur le net, et je découvre que la plupart des gens raconte n'importe quoi, comme la deuxième commande ou le distinct n'est sensé prendre en compte que le clan parce que il y a les parenthèse...
Donc si je n'avait que ces 5 résultats la dans ma table je veux voir apparaitre (bien présenté dans un tableau bien évidement) :
4      The Simpsons         [CG]         1           1216575003

5      Heroes                   [SF]          1           1216575004
Mais moi j'ai ca :
1      Code Quantum       [CG]         1           1216575000   

2      Sliders                    [SF]          1           1216575001
ou ca , ca dépend cde la forme de la machine XD :
2      Sliders                    [SF]          1           1216575001
1      Code Quantum       [CG]         1           1216575000   

En fait, comme je l'ai lu sur beaucoup d'autre forum, que ce soit avec DISTINCT ou GROUP BY, le ORDER BY est toujours pris apres. J'ai vu des trucs avec des AS qui me semblait correct mais le plus souvent il balance le code comme solution sans expliquer les effets, ce que je deteste -_-'

Peut-etre que ce n'set aps la solution je ne sai pas vraiment, certain petit malin dise que c'est pas possible... Pour moi tout est possible, si il le faut je fais ca en 25 requetes mais ca marchera ^^ C'est juste que si quelqu'un a la solution en une ou max deux requetes ca serait pas mal en m'expliquant un minimum ce que je ne connait aps encore :)

Merci d'avance a toute réponse ;)

Si il vous faut plus d'explications, je suis a vous toute la journéeet meme toute la nuit ^^ GEEK POWA XD

7 réponses

Messages postés
10
Date d'inscription
samedi 12 juillet 2008
Statut
Membre
Dernière intervention
25 juillet 2008

oula y'a rien personne ? je demande un truc trop dur ?
Meme vous truc les plus pérave me suffiront, du moment que ca marche :)

Si je trouve cette nuit, je vous passerez la solution ^^
Messages postés
214
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
9 janvier 2019

c'est quoi le souci exactement je comprends pas ? qu'est ce que tu veux faire exactement ?

Parce que si tu veux trouver les doublons de ta table tu fais ca :
SELECT id FROM table GROUP BY id HAVING count(id) > 1;

p3x
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Hello ^^

Et avec une requete imbriquée de ce genre ? Tu fais une requete sur un résultat déjà ordonné :

SELECT DISTINCT
(clan), titre, num_ep, mes_autres_champs FROM (SELECT clan, titre, num_ep, mes_autres_champs FROM episodes ORDER BY DESC) alias_requete1 ORDER BY date
ASC )
<li>On prend tous les enregistrements de la table en appliquant un ORDER BY DESC</li><li>Puis, on fait une recherche, sur la précédente requete.</li>
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
10
Date d'inscription
samedi 12 juillet 2008
Statut
Membre
Dernière intervention
25 juillet 2008

Bon... J'ai testé ta solution Jojo, de différentes manières mais impossible de la faire marcher... Enla lisant j'ai compris qu'il fallait apparament faire une requete imbriquée. Ce que j'ai chercher sur le net et j'ai trouver réponse à ma solution je vous la met quand même, je suis sur que ca interessera un paquet de gens :
"SELECT e.* FROM episodes e INNER JOIN (SELECT max(date) date, clan FROM episodes GROUP BY clan ) le ON e.date le.date AND e.team le.clan"

Je ne peux qu'avouer que je ne comrpend pas vraiment tout, mais ca marche alors je vais me renseigner sur INNER JOIN le plus tot possible :p

Petit "bug" remarqué, si deux entrées on exactement le meme date, c'est à dire le même timestamp, alors il affichera tout les champs de ce timestamp, il faudrait ajouter que l'ID doit etre différent je supose ^^ mais moi ca ne me gêne pas donc :p
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Lu,

Pour choisir un seul enregistrement par date ET par clan, ajoute ceci :

SELECT DISTINCT (CONCAT(e.clan, e.date)), e.* FROM episodes e INNER JOIN (SELECT max(date) date,
clan FROM episodes GROUP BY clan ) le ON e.date le.date AND e.team
le.clan

Normalement, ça doit marcher. En fait, là on fait une recherche en enlevant les doublons ou le clan et la date sont différents (on obtient un champ clan.date)
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Lu,

Pour choisir un seul enregistrement par date ET par clan, ajoute ceci :

SELECT DISTINCT (CONCAT(e.clan, e.date)), e.* FROM episodes e INNER JOIN (SELECT max(date) date,
clan FROM episodes GROUP BY clan ) le ON e.date le.date AND e.team
le.clan

Normalement, ça doit marcher. En fait, là on fait une recherche en enlevant les doublons ou le clan et la date sont différents (on obtient un champ clan.date)
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
10
Date d'inscription
samedi 12 juillet 2008
Statut
Membre
Dernière intervention
25 juillet 2008

oh ! c'est gentil ca ^^ je prend :p voila je peut clore le topic ^^ J'espère que ca pourra servira  qq un d'autre ;)