[SQL] Problème avec une petite requête et un DISTINCT.

Problème avec une petite requête et un DISTINCT. [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 27-07-2007 à 13:10:19    

Hello tout le monde. Donc j'ai les deux tables suivantes :
 
R1  
----------
id  |  time
----------
1   |  5
2   |  6
2   |  7
3   |  8

 
 
R2
-----------
id  |  titre
-----------
1  |  Salut
2  |  Bonjour
3  |  Hello

 
 
 
Sujet : On veut récupérer le titre le plus récent, plus un titre est récent plus 'time' augmente. Par exemple "Hello" est plus vieux que "Salut"
On aurait donc le résultat suivant :
-------------
time  |  titre
-------------
5      |  Hello  
7      |  Bonjour
8      |  Salut

 
 /!\ On veut éliminer les redondances de titre !
Donc la solution suivante n'est en aucun cas envisageable :
-------------
time  |  titre
-------------
5      |  Hello  
6      |  Bonjour
7      |  Bonjour
8      |  Salut

 
MA REQUETE :
 
SELECT DISTINCT R2.titre, R1.time
FROM from R1, R2
WHERE R1.id=R2.id
GROUP BY R2.titre, R1.time
ORDER BY R1.time DESC
LIMIT 5
 
Donc avec cette méthode on trouve la solution que je ne veux pas trouver :
-------------
time  |  titre
-------------
5      |  Hello  
6      |  Bonjour
7      |  Bonjour
8      |  Salut

/!\ On voit bien que le DISTINCT n'a pas 'agit'
 
Sinon j'ai trouvé la requete SQL qui permet d'enlever ces redondances, cependant pour se faire je ne récupère pas le temps...
 
SELECT DISTINCT R2.titre
FROM R1, R2
WHERE R1.id=R2.id
GROUP BY R1.time
ORDER BY R1.time DESC
LIMIT 5  
 
et on trouve donc le résultat suivant
-------------
titre
-------------
Hello  
Bonjour
Salut

 
 
 
PS :  
En fait c'est la bdd de phpBB, et je cherche à récupérer les 5 derniers topics où les personnes ont posté pour la dernière fois, ainsi que la date à laquelle ils ont posté.
Si vous préférez voici les deux requetes avec les champs / tables de phpBB :
SELECT DISTINCT (FT.topic_title), FP.post_time
FROM forum_topics FT, forum_posts FP
WHERE FT.topic_id = FP.topic_id
GROUP BY FT.topic_title, FP.post_time
ORDER BY FP.post_time DESC
LIMIT 5  
 
SELECT DISTINCT FT.topic_title
FROM forum_topics FT, forum_posts FP
WHERE FT.topic_id = FP.topic_id
GROUP BY FP.post_time
ORDER BY FP.post_time DESC
LIMIT 5  
 
Les résultats en image :
http://st4n.041.free.fr/exemple_sql.jpg
 
 
 
Merci d'avance pour l'aide.


Message édité par stannie le 27-07-2007 à 13:23:32
Reply

Marsh Posté le 27-07-2007 à 13:10:19   

Reply

Marsh Posté le 27-07-2007 à 13:50:14    

j'ai trouvé une autre méthode en cherchant sur des forums :
 
SELECT t.topic_title, p.post_time
FROM forum_topics AS t, forum_forums AS f, forum_posts AS p, forum_users AS u
WHERE t.forum_id = f.forum_id
AND t.topic_moved_id =0
AND p.post_id = t.topic_last_post_id
AND u.user_id = p.poster_id
ORDER BY t.topic_last_post_id DESC
LIMIT 5
 
Cette technique marche parfaitement pour ce que je veux faire, mais par intérêt pour le SQL j'aimerais savoir si ce que je voulais faire plus haut est possible.


Message édité par stannie le 27-07-2007 à 13:51:01
Reply

Marsh Posté le 27-07-2007 à 13:55:45    

au piff, une requete imbriquée :/
 
select titre,id
from R2
where id IN (select distinct id from R1 order by time desc LIMIT 5)

Reply

Marsh Posté le 27-07-2007 à 14:03:56    

euh non :o
max est une fonction d'aggregation bien pratique pour trouver le ... suspense ... max d'un ensemble de records.

Code :
  1. SELECT R2.titre, max(R1.time)
  2. FROM from R1 inner join  R2 on R1.id=R2.id
  3. GROUP BY R2.titre
  4. ORDER BY max(R1.time) DESC
  5. LIMIT 5
 

note:
- distinct et group by ensemble ça sert à rien
- group by n'est utile qu'en présence de fonction d'aggregation dans ton select.


Message édité par anapajari le 27-07-2007 à 14:04:21
Reply

Marsh Posté le 24-09-2007 à 14:08:46    

Bonjour, as tu trouvé une réponse s'il te plait, car je rencontre le meme probleme dans la gestion d'un site de l'un de mes clients en PHPBB
 
www.forum-rachatdecredits.com/test.php
 
Merci milles fois

Reply

Marsh Posté le 24-09-2007 à 15:08:57    

dulaque a écrit :

Bonjour, as tu trouvé une réponse s'il te plait, car je rencontre le meme probleme dans la gestion d'un site de l'un de mes clients en PHPBB
 
www.forum-rachatdecredits.com/test.php
 
Merci milles fois


bonjour, as-tu lu la réponse d'anajapari juste avant d'avoir uppé le topic ?
 
parcequ'il y a tout ce qu'il faut dedans : solution et explications.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed