Afficher mes sujets dans l'ordre comme celui du forum de hfr

Afficher mes sujets dans l'ordre comme celui du forum de hfr - SQL/NoSQL - Programmation

Marsh Posté le 06-03-2003 à 15:03:06    

Voilà, j'ai fait un petit forum privé en php et je voudrais afficher la liste des sujets comme celui du forum de hfr. Voilà, la requête sql :
 

Code :
  1. "SELECT s.NumSujet, s.LibelleSujet, s.NbLus, s.NumTypeConversation, s.NumEtatSujet, s.NumAuteur, c.Surnom FROM sujets s, messages m, comptes c WHERE s.NumAuteur = c.NumCompte AND s.NumSujet = m.NumSujet GROUP BY s.NumSujet ORDER BY m.DateCreation DESC LIMIT $IndiceDebut, $IndiceFin" ;


 
mais ça marche pas :( Je les ai dans l'ordre de leur NumSujet décroissant :??:
 
C'est le group by qui fait chier. Sans, j'ai bien les sujets dans le bon ordre, mais dupliqués (autant de fois que de messages par sujet). J'avais donc pensé mettre un DISTINCT devant s.NumSujet, mais c'est sans effet ... Là, je suis à court d'idées...  
 
Aidez moi, svp :jap:

Reply

Marsh Posté le 06-03-2003 à 15:03:06   

Reply

Marsh Posté le 06-03-2003 à 15:14:02    

ben tu mets un distinct sur le numsujet et pi ça roule nom???

Reply

Marsh Posté le 06-03-2003 à 15:17:37    

pis les sujets sur HFR sont triés par date de dernière modification aussi, non par date de création :heink:

Reply

Marsh Posté le 06-03-2003 à 15:25:00    

ce qui, en même temps, est bcp plus logique! sinon, tu aurais toujours les topic "dinausores en haut!!  :lol:

Reply

Marsh Posté le 06-03-2003 à 15:46:35    

arghbis a écrit :

ce qui, en même temps, est bcp plus logique! sinon, tu aurais toujours les topic "dinausores en haut!!  :lol:  


 
petit malin va :lol:
 
DateCreation (le m. pour l'alias de la table messages) est la date de création d'un message se rapportant à un sujet. Et le DESC, c'est pour décroissant. Donc, ma requête veut dire afficher diverses infos concernant des sujets triés dans l'ordre décroissant des dates de création de leurs messages (du message créé le plus récemment au moins récent), ceci afin d'éviter le topics dinosaures en haut ;)
 
Distinct devant NumSujet, comme je l'ai dit, c'est inefficace et je sais pas pourquoi :(

Reply

Marsh Posté le 06-03-2003 à 20:58:27    

parce que DISTINCT se rapporte à tout le resultat.
c'est j'étais toi je ferais ca en deux requètes séparées, ca serait VRAIMENT bcp plus leger.

Reply

Marsh Posté le 06-03-2003 à 21:00:53    

Si tu veux quand même le faire en une seule requète, ca serait plutôt :
 
SELECT s.NumSujet, s.LibelleSujet, s.NbLus, s.NumTypeConversation, s.NumEtatSujet, s.NumAuteur, c.Surnom, MAX(m.DateCreation) as d FROM sujets s, messages m, comptes c WHERE s.NumAuteur = c.NumCompte AND s.NumSujet = m.NumSujet GROUP BY s.NumSujet ORDER BY d DESC LIMIT $IndiceDebut, $IndiceFin

Reply

Marsh Posté le 07-03-2003 à 08:43:20    

ben tiens! je l'avais pas lue en entier ta requête,! mais le truc qui me dérangeait était de pas voir de distinct!!  :whistle:  
sinon, si tu mets un distinct, normalement tu n'a pas besoin de group by

Reply

Marsh Posté le 07-03-2003 à 19:46:30    

arghbis a écrit :

ben tiens! je l'avais pas lue en entier ta requête,! mais le truc qui me dérangeait était de pas voir de distinct!!  :whistle:  
sinon, si tu mets un distinct, normalement tu n'a pas besoin de group by

:non: c'est l'inverse, le distinct porte sur tout le resultat alors que le group by porte uniquement sur le champ précisé


Message édité par joce le 08-03-2003 à 08:16:24
Reply

Marsh Posté le 08-03-2003 à 00:55:56    

koi?? tu peux pas faire de distinct (numsujet)?? et uniquement sur ce champ???? bizarre...

Reply

Marsh Posté le 08-03-2003 à 00:55:56   

Reply

Marsh Posté le 08-03-2003 à 08:15:51    

arghbis a écrit :

koi?? tu peux pas faire de distinct (numsujet)?? et uniquement sur ce champ???? bizarre...


 
"DISTINCT is converted to a GROUP BY on all columns, DISTINCT combined with ORDER BY will in many cases also need a temporary table. "

Reply

Marsh Posté le 08-03-2003 à 09:51:40    

ah bon, ben c bizarre qd  même! c spécifique à mysql ou c dans la norme sql???  :heink:

Reply

Marsh Posté le 08-03-2003 à 10:27:26    

arghbis a écrit :

ah bon, ben c bizarre qd  même! c spécifique à mysql ou c dans la norme sql???  :heink:  


 
moi aussi, je pensais que je pouvais faire un distinct sur le champ NumSujet, mais je me suis vite rendu compte que ça portait sur tout le résultat.
 
A propos, comment on fait pour récupérer le résultat d'une requête sql et d'appliquer sur ce résultat, une seconde requête sql (je parle pas ici de requêtes sql imbriquées, hein!). Merci :jap:

Reply

Marsh Posté le 08-03-2003 à 15:52:20    

précise ton idée stp!
 
tu trvail avec quel sgbd, paske je suis sûr que sous postgresql je peux faire un distinct numsujet et pas sur les autres

Reply

Marsh Posté le 09-03-2003 à 14:29:37    

requête imbriquée :
 
select * from table1 where NumTable1 in (select * from Table2)
 
tu vois?
 
moi, je voulais savoir si je pouvais faire un truc du genre (je le mets en une sorte de pseudo-code hein!) :
Resultat1 = select * from table1 where Numtable1 > 5
 
Resultat2 = select * from Resultat1 where Numtable1 < 2
 
je sais, on pouvait le faire en 1 requête, mais c'est juste à titre d'exemple...

Reply

Sujets relatifs:

Leave a Replay

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