Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1310 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Sql] Trier une requete par une autre ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[Sql] Trier une requete par une autre ?

n°818775
Slash2012
Posté le 10-08-2004 à 11:45:46  profilanswer
 

Bonjour,
 
J'ai parcouru le forum à la recherche de ma solution mais je n'ai pas trouvé donc je poste ce message.
 
En gros je voudrais trier un resultat de requete par une requete
 
REQUETE 1
select auteur_message, nom_site, date_message
from message_forum, site
where mes_id_message is null      
and no_site = site_message
order by REQUETE 2
 
REQUETE 2
select date_message
from message_forum
where mes_id_message is not null
and no_site = site_message
order by date_message desc
 
J'ai essayé pas mal de truc et jamais le bon resultat.
 
Merci d'avance.

mood
Publicité
Posté le 10-08-2004 à 11:45:46  profilanswer
 

n°819068
-Farenheit​-
Posté le 10-08-2004 à 15:50:18  profilanswer
 

Pourquoi ne pas faire directement :
 
SELECT auteur_message, nom_site, date_message  
FROM message_forum, site  
WHERE site.no_site = message_forum.site_message  
AND site_message.mes_id_message IS NULL  
ORDER BY message_forum.date_message desc  
 
??
 
Sinon précise ce que tu veux ressortir de tes 2 tables, et sur quoi tu veux les trier stp.
 

n°819083
Slash2012
Posté le 10-08-2004 à 15:56:10  profilanswer
 

En fait, je voudrais trier par date_message mais de la 2eme requete.
 
Le but etant de lister le sujet principale de la requete et ensuite les reponses associés et que tout celà soit trié en fonction de la dernière réponse exactement comme un forum.
 
J'ai essayé :
select sujet_message, corps_message, auteur_message, nom_site, convert(char(12), message_forum.date_message, 103) date, convert(char(5), message_forum.date_message, 8) heure  
from message_forum, site, (select message_forum.date_message as date_message from message_forum where sujet_message is null) req1  
where id_message < 219 and id_forum = '9' and mes_id_message is null      
and no_site = site_message
order by req1.date_message desc
 
Mais ça n'a pas l'air de fonctionner non plus :(
 
Merci.

n°819107
vttman
PT, ROT,VTT
Posté le 10-08-2004 à 16:11:12  profilanswer
 

Et ça ?
 
SELECT auteur_message, nom_site, date_message  
FROM message_forum, site  
WHERE site.no_site = message_forum.site_message  
AND site_message.mes_id_message IS NULL  
ORDER BY auteur_message ASC, message_forum.date_message desc  

n°819111
-Farenheit​-
Posté le 10-08-2004 à 16:12:59  profilanswer
 

Il faut que tu utilise des alias je pense à un truc du genre :
 
SELECT *
FROM message_forum TOPIC, message_forum REPONSE, site  
WHERE site.no_site = TOPIC.site_message  
AND TOPIC.id_message = REPONSE.id_message  
AND TOPIC.mes_id_message IS NULL  
AND ...
ORDER BY REPONSE.date_message desc  
 
Tu fait comme si tu avait 3 tables, SITE, TOPIC et MESSAGE
Tu fait tes jointures pour avoir un TOPIC avec le SITE et les MESSAGE qui lui sont associés.
Tu rajoute dans le Where les clauses qui vont bien pour ne récupérer que ce qui t'intéresse.
 

n°819112
vttman
PT, ROT,VTT
Posté le 10-08-2004 à 16:13:02  profilanswer
 

Enfin bref ... il faut dans ton cas, trier sur plusieurs
colonnes et pas que sur une ...

n°819152
Slash2012
Posté le 10-08-2004 à 16:25:46  profilanswer
 

Comme j'ai pas tout compris, désolé :(
 
Je mets le "schéma" de ma base
 
Oublions la table SITE, voici la table MESSAGE_FORUM
 
ID_MESSAGE | ID_FORUM | MES_ID_MESSAGE | SUJET_MESSAGE | CORPS_MESSAGE | DATE_MESSAGE
 
Merci encore pour votre aide, je vais quand meme essayé de voir dans mon coin avec les réponses du dessus :)

n°819176
-Farenheit​-
Posté le 10-08-2004 à 16:31:03  profilanswer
 

peux tu décrire les champs ID_MESSAGE et MES_ID_MESSAGE stp
 
En gros est-ce que MES_ID_MESSAGE contient l'ID du sujet principale ?

n°819179
Slash2012
Posté le 10-08-2004 à 16:31:32  profilanswer
 

ID_MESSAGE est juste un identifiant, MES_ID_MESSAGE est NULL lorsqu'il s'agit du sujet et SUJET_MESSAGE lorsqu'il s'agit d'une réponse.
 
Et donc oui MES_ID_MESSAGE contient l'identifiant du sujet.


Message édité par Slash2012 le 10-08-2004 à 16:33:07
n°819193
-Farenheit​-
Posté le 10-08-2004 à 16:39:14  profilanswer
 

Regarde ce que ca te donne ca :
 
SELECT *  
FROM message_forum SUJET, message_forum REPONSE    
WHERE SUJET.id_message = REPONSE.mes_id_message  
AND SUJET.mes_id_message IS NULL    
AND REPONSE.sujet_message IS NULL
ORDER BY REPONSE.date_message desc    
 

mood
Publicité
Posté le 10-08-2004 à 16:39:14  profilanswer
 

n°819210
Slash2012
Posté le 10-08-2004 à 16:50:49  profilanswer
 

Ca à l'air de marche maintenant il me reste plus qu'a l'integrer avec tout ce que j'ai pu epurer.
 
C'est jamais evident de reprendre un projet en cours... surtout quand on ne l'a pas suivi du début à la fin et que c'est pas super bien conçu.
 
En tout cas merci beaucoup !! En esperant que j'arrive à m'en sortir pour la fin !

n°819245
Slash2012
Posté le 10-08-2004 à 17:02:51  profilanswer
 

Bon décidement, je dois pas avoir de chance, je n'arrive pas à integrér la requete dans l'existant. Je crois que je vais refaire le script parcque c'est la daube. La reprise de projet que c'est dur ;) !!!
 
Merci encore !

n°819256
Slash2012
Posté le 10-08-2004 à 17:08:57  profilanswer
 

Je crois bien que je viens de reussir !!!
MERCI MERCI MERCI !!!!

n°819348
Slash2012
Posté le 10-08-2004 à 17:37:20  profilanswer
 

J'ai modifié ma requete mais en fait ca ne fonctionne pas, j'obtiens plusieurs fois le meme sujet.
 
   'SELECT top ' +  @sNbSujets + ' SUJET.id_message, SUJET.sujet_message, SUJET.corps_message, SUJET.auteur_message, site.nom_site, convert(char(12), SUJET.date_message, 103) date, convert(char(5), SUJET.date_message, 8) heure  
   FROM message_forum as SUJET, message_forum as REPONSE, site    
   WHERE SUJET.id_message = REPONSE.mes_id_message  
   AND SUJET.id_message < ' + @sNumMsgDepart + '
   AND SUJET.id_forum = ' + @sNumForum + '
   AND SUJET.mes_id_message IS NULL    
   AND REPONSE.mes_id_message IS NOT NULL
   AND SITE.no_site = SUJET.site_message  
   ORDER BY REPONSE.date_message desc'

n°819374
-Farenheit​-
Posté le 10-08-2004 à 17:44:40  profilanswer
 

Normalement la requête que tu viens de poster doit te retourner toutes les réponses.
Tu ne récupèreras pas les sujets sans réponses puisque tu fais une jointure exacte (SUJET.id_message = REPONSE.mes_id_message).
 
Si c'est bien les réponses que tu veux, remplace les SUJET de la clause SELECT par des REPONSE

n°819400
Slash2012
Posté le 10-08-2004 à 17:50:08  profilanswer
 

Bah en fait ce que j'obtiens c'est les sujets suivis de leurs reponses, jusqu'à la tout va bien mais un moment le il y a repetition de sujet. C'est dommage car le tri par date fonctionne bien... :(

n°819429
Slash2012
Posté le 10-08-2004 à 17:58:05  profilanswer
 

Bon je reprendrai ça demain la je suis en train de me perdre. Demain sera un autre jour !
 
En tout cas, merci beaucoup ! :D

n°820482
Slash2012
Posté le 11-08-2004 à 16:45:17  profilanswer
 

Bon ma dernière version de requete est :
 
   'SELECT top ' +  @sNbSujets + ' SUJET.id_message, SUJET.sujet_message, SUJET.corps_message, SUJET.auteur_message, site.nom_site, convert(char(12), SUJET.date_message, 103) date, convert(char(5), SUJET.date_message, 8) heure  
   FROM message_forum as SUJET, message_forum as REPONSE, site    
   WHERE SUJET.id_message = REPONSE.mes_id_message  
   AND SUJET.id_message < ' + @sNumMsgDepart + '
   AND SUJET.id_forum = ' + @sNumForum + '
   AND SUJET.mes_id_message IS NULL    
   AND REPONSE.mes_id_message IS NOT NULL
   AND SITE.no_site = SUJET.site_message  
   ORDER BY REPONSE.date_message desc'
 
Et ça marche toujours pas, je ne comprends vraiment pas... HELP ME PLEASE !!! Je commence à croire que c'est moi qui déconne completement non ?
 
Merci d'avance.

n°820483
Slash2012
Posté le 11-08-2004 à 16:47:26  profilanswer
 

Ca me recupère bien le sujet avec ses réponses associées avec un semblant de tri mais quand j'effectue ma boucle il me repete des sujets et les reponses qui vont avec... :(

n°820520
glod 2
Votre trajet, notre projet.
Posté le 11-08-2004 à 17:29:28  profilanswer
 

Ben si t'as plusieurs fois le même sujet fait un SELECT DISTINCT non ?

n°820533
-Farenheit​-
Posté le 11-08-2004 à 17:37:24  profilanswer
 

tu pourrais mettre le résultat de la requête pour 1 sujet et ses réponses stp, accompagné des lignes qui correspondent dans la base ?
 

Citation :

...mais quand j'effectue ma boucle...


 
Quelle boucle ? :??:


Message édité par -Farenheit- le 11-08-2004 à 17:37:46
n°820568
Slash2012
Posté le 11-08-2004 à 18:07:02  profilanswer
 

Glod 2 : J'ai pensé aussi à un DISTINCT mais il me fait une erreur comme quoi je dois mettre le truc dans le ORDER BY. De plus, je ne sais pas si le tri par date de réponses marchera après... :(
 
Farenheit : Oublions la boucle (contenu dans un fichier ASP qui appel la requete) car je ne pense pas qu'elle soit en cause. Pour le résultat, si je prends le sujet 1, il est bien accompagné de ses réponses et bien trié, il figure en premier.

n°820659
Beegee
Posté le 11-08-2004 à 19:10:33  profilanswer
 

Y a un truc que je comprends pas trop ...
 
tu veux avoir la liste des SUJETS uniquement, triés par date de dernier message, c'est bien ça ? :)
 
Tu utilises mySql ?

n°820906
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-08-2004 à 22:35:01  profilanswer
 

Vu la syntaxe du convert, c'est SQL Server.
 
Donc :
 
select sujet.auteur_message, site.nom_site, sujet.date_message, post.date_message
from message_forum post, message_forum sujet, site
where sujet.mes_id_message is null      
and site.no_site = sujet.site_message
and post.mes_id_message = sujet.id_message
where post.date_message = (select max(post2.date_message) from message_forum post2 where post2.mes_id_message = sujet.id_message)
order by post.date_message
 
Normalement ça doit marcher.


Message édité par Arjuna le 11-08-2004 à 22:37:44
n°820907
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-08-2004 à 22:36:53  profilanswer
 

Sinon, plus simple en fait... (par contre, à cause du group by, je ne sais pas si c'est plus rapide)
 
select sujet.auteur_message, site.nom_site, sujet.date_message, max(post.date_message)
from message_forum post, message_forum sujet, site
where sujet.mes_id_message is null      
and site.no_site = sujet.site_message
and post.mes_id_message = sujet.id_message
group by sujet.auteur_message, site.nom_site, sujet.date_message
order by 4


Message édité par Arjuna le 11-08-2004 à 22:38:26
n°821230
Slash2012
Posté le 12-08-2004 à 11:17:11  profilanswer
 

Je veux avoir la liste des sujets + les reponses correspondantes triés pas date de dernière réponse.
 
Le projet qu'on vient de me refiler est un forum développé en ASP sous SQL SERVER avec procédures stockées.
 
Je suis en train de tester tes requetes Arjuna... Merci

n°821233
Slash2012
Posté le 12-08-2004 à 11:23:24  profilanswer
 

Je vais effectuer quelques tests mais ça à l'air de fonctionner avec :
 

Citation :


   'select top ' +  @sNbSujets + ' sujet.id_message, sujet.auteur_message, site.nom_site, sujet.date_message, post.date_message  
   from message_forum as post, message_forum as sujet, site  
   where sujet.mes_id_message is null        
   and site.no_site = sujet.site_message  
   and post.mes_id_message = sujet.id_message  
   and sujet.id_message < ' + @sNumMsgDepart + '
   and sujet.id_forum =  ' + @sNumForum + '
   and post.date_message = (select max(post2.date_message) from message_forum as post2 where post2.mes_id_message = sujet.id_message)  
   order by post.date_message desc'


 
Si je vois que ca deconne je reviendrai vous demander de l'aide !! ;)
En tout cas, si on ne se recroise pas merci beaucoup !! C'etait hyper important !

n°822167
Slash2012
Posté le 13-08-2004 à 11:01:46  profilanswer
 

Et oui c'est encore moi vraiment désolé !! Le tri sur les résultats semble fonctionner par contre je n'obtiens pas tous les sujets. Est ce du à la jointure "and post.mes_id_message = sujet.id_message" qui ne prend que les sujets ayant des réponses ?
 
Merci


Message édité par Slash2012 le 13-08-2004 à 11:02:01
n°822179
Beegee
Posté le 13-08-2004 à 11:11:21  profilanswer
 

fais une jointure externe ...
 
je connais pas la syntaxe de SQL server ;)

n°822186
Slash2012
Posté le 13-08-2004 à 11:14:06  profilanswer
 

ok je vais essayé de trouver merci bien :)
Faut pas que je foire tout en essayant des syntaxes de fou !! :D


Message édité par Slash2012 le 13-08-2004 à 11:19:51
n°822221
vttman
PT, ROT,VTT
Posté le 13-08-2004 à 11:57:09  profilanswer
 

Syntaxe Sql Server pour récupérer tous les chp1
de la tablea  
avec ou sans chp2 pour tableb
=>  
select tablea.chp1, tableb.chp2
from tablea left join tableb
 on  tablea.chp1 = tableb.chp1
 

n°822338
Slash2012
Posté le 13-08-2004 à 13:57:35  profilanswer
 

Bon la je suis vraiment doué donc je remets ma requete parcque ca ne recupére toujours pas les sujets sans réponse :(
 

Citation :


   'select top ' +  @sNbSujets + ' SUJET.id_message, SUJET.sujet_message, SUJET.corps_message, SUJET.auteur_message, site.nom_site, convert(char(12), SUJET.date_message, 103) date, convert(char(5), SUJET.date_message, 8) heure
   from site, message_forum as post left join message_forum as sujet on post.mes_id_message = sujet.id_message  
 
   where sujet.mes_id_message is null        
   and site.no_site = sujet.site_message  
 
   and sujet.id_message < ' + @sNumMsgDepart + '
   and sujet.id_forum =  ' + @sNumForum + '
   and post.date_message = (select max(post2.date_message) from message_forum as post2 where post2.mes_id_message = sujet.id_message)  
   order by post.date_message desc'

n°822351
-Farenheit​-
Posté le 13-08-2004 à 14:08:51  profilanswer
 

:non: la tu récupère les messages sans sujet...  
 
essaye comme ca :

Citation :


'select top ' +  @sNbSujets + ' SUJET.id_message, SUJET.sujet_message, SUJET.corps_message, SUJET.auteur_message, site.nom_site, convert(char(12), SUJET.date_message, 103) date, convert(char(5), SUJET.date_message, 8) heure  
  from site, message_forum as sujet left join message_forum as post on post.mes_id_message = sujet.id_message  
 
  where sujet.mes_id_message is null        
  and site.no_site = sujet.site_message  
 
  and sujet.id_message < ' + @sNumMsgDepart + '  
  and sujet.id_forum =  ' + @sNumForum + '  
  and post.date_message = (select max(post2.date_message) from message_forum as post2 where post2.mes_id_message = sujet.id_message)  
  order by post.date_message desc'  


Message édité par -Farenheit- le 13-08-2004 à 14:09:38
n°822376
Slash2012
Posté le 13-08-2004 à 14:18:12  profilanswer
 

Toujours rien :(
 
J'ai même essayé :
 
from site, message_forum as sujet left join message_forum as post on sujet.id_message = post.mes_id_message

n°822393
-Farenheit​-
Posté le 13-08-2004 à 14:35:26  profilanswer
 

et si tu vire la clause

Citation :

and post.date_message = (select max(post2.date_message) from message_forum as post2 where post2.mes_id_message = sujet.id_message)


 


Message édité par -Farenheit- le 13-08-2004 à 14:40:35
n°822401
Slash2012
Posté le 13-08-2004 à 14:39:05  profilanswer
 

alleluia !! Peux tu m'expliquer si ca ne te derange pas (j'ai tellement emmerdé le monde avec ma requete !!) ?
 
Parcqu'en fait je pensais que le truc qu'on a viré servait au tri par date...

n°822409
Slash2012
Posté le 13-08-2004 à 14:41:29  profilanswer
 

Non en fait ca marche pas, ca repete les sujets...:(

n°822412
-Farenheit​-
Posté le 13-08-2004 à 14:42:33  profilanswer
 

Et ca ?
 
'select top ' +  @sNbSujets + ' SUJET.id_message, SUJET.sujet_message, SUJET.corps_message, SUJET.auteur_message, site.nom_site, convert(char(12), SUJET.date_message, 103) date, convert(char(5), SUJET.date_message, 8) heure  
 from site, message_forum as sujet left join message_forum as post on post.mes_id_message = sujet.id_message    
 
 where sujet.mes_id_message is null          
 and site.no_site = sujet.site_message    
 
 and sujet.id_message < ' + @sNumMsgDepart + '  
 and sujet.id_forum =  ' + @sNumForum + '  
 and (
post.date_message = (select max(post2.date_message) from message_forum as post2 where post2.mes_id_message = sujet.id_message)  
OR
 post.date_message Is Null
     )    
 order by post.date_message desc'

n°822421
Slash2012
Posté le 13-08-2004 à 14:46:58  profilanswer
 

Là ça à l'air de fonctionnern j'ai juste encore un petit soucis de tri par date des sujets qui n'ont pas de réponses mais ca vient peut etre de ma base et je pense que je pourrai me débrouiller sur ce coup...
 
En tout cas encore un grand merci à tout ceux qui ont participé à ce sujet !
 
I'll be back ;)
 
Ps : Si y'a des personnes pour m'expliquer un peu le résultat final, je ne suis pas contre ;)


Message édité par Slash2012 le 13-08-2004 à 14:48:35
n°822707
Tamahome
⭐⭐⭐⭐⭐
Posté le 13-08-2004 à 18:38:06  profilanswer
 

Slash2012 a écrit :

Et oui c'est encore moi vraiment désolé !! Le tri sur les résultats semble fonctionner par contre je n'obtiens pas tous les sujets. Est ce du à la jointure "and post.mes_id_message = sujet.id_message" qui ne prend que les sujets ayant des réponses ?
 
Merci


 
explicite tes jointures et fous la en externe :
 
"left outer join post P on P.mes_id_message = sujet.id_message"
 
au lieu du "from post"


---------------
Hobby eien /人◕ ‿‿ ◕人\
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Sql] Trier une requete par une autre ?

 

Sujets relatifs
[Access] Est-il possible de faire cette requete?faire une liste d'exclusion en sql
probleme de concaténation requete mysql[MySQL] Requete utilisant 2 tables, ca marche pas
Une requête que j'arrive pas à faire....HELP!!!!!!!!Problème Sql Server sous vb.net!!!!!!!!
[C#] Connection Server SQLRequete SQL avec Builder C++ 6
Plus de sujets relatifs à : [Sql] Trier une requete par une autre ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR