Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2010, 23h25   #1
Futur Membre du Club
 
Inscription : février 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 66
Points : 16
Points : 16
Par défaut problème sur requête SQL

Bonsoir,

Je bloque sur une requête SQL qui semble être très simple

voici ma table
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
id 	idtopic 	timestamp 
411 	40 	1292450871
410 	51 	1292449540
409 	62 	1292437093
408 	62 	1292430193
407 	62 	1292427069
406 	62 	1292425813
405 	62 	1292423719
404 	47 	1292421993
403 	62 	1292421481
402 	61 	1292421202
401 	62 	1292421137
400 	47 	1292417818
399 	62 	1292417635
398 	61 	1292415769
397 	62 	1292415695
396 	40 	1292415270
395 	62 	1292415229
c'est une table d'un forum où id est l'identifant du message, idtopic l'identifiant du topic et timestamp la date du message.

je voudrais récupérer les 10 topics les plus récents avec le dernier message pour chaque topic

voici ma requête

Code :
1
2
3
4
5
SELECT msg.idtopic,msg.id,msg.timestamp
FROM phpboost_forum_msg msg
GROUP BY msg.idtopic
ORDER BY max(msg.timestamp) DESC
LIMIT 0,10
ce qui me renvoi

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
idtopic 	id 	timestamp
40 	327 	1291896478
51 	291 	1291803838
62 	389 	1292410789
47 	400 	1292417818
61 	402 	1292421202
49 	390 	1292411183
60 	368 	1292215364
58 	347 	1292005645
28 	131 	1291115526
55 	341 	1291968803
ce qui me renvoi bien mes 10 dernier topic mis à jour par mais pas le dernier message du topic.

je suis sûr qu'il un tout petit truc.

Merci à tous pour votre aide !!!!
Ohemeg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 23h45   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
D'abord ta requête n'est syntaxiquement pas valide.
Certes MySql ne te renvoie pas d'erreur et exécute la requête mais c'est une simplification extreme de MySql (hasardeuse à mon sens) qui techniquement peut te renvoyer n'importe quel id du topic, ce que tu as constaté.
A lire au sujet du GROUP BY dans MySql :

Donc il faut d'abord récupérer la liste des 10 topics les plus récents (la sous-requête), puis revenir sur la table récupérer le message le plus récent correspondant au topic (le JOIN):
Code :
1
2
3
4
5
6
7
8
9
10
SELECT t.idtopic,msg2.id,t.max_timestamp
FROM phpboost_forum_msg msg2
JOIN (SELECT msg.idtopic,max(msg.timestamp) AS max_timestamp
	FROM phpboost_forum_msg msg
	GROUP BY msg.idtopic
	ORDER BY max(msg.timestamp) DESC
	LIMIT 0,10
	) AS t
	ON msg2.idtopic = t.idtopic AND msg2.timestamp = t.max_timestamp
ORDER BY t.max_timestamp DESC
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2010, 00h50   #3
Futur Membre du Club
 
Inscription : février 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 66
Points : 16
Points : 16
merci infiniment pour ton aide, finalement ce n'était pas aussi simple que je le pensais, mais je pense avoir compris la jointure.

merci
Ohemeg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h17.


 
 
 
 
Partenaires

Hébergement Web