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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [non résolu] Retourner le paragraphe le plus récent par document

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[non résolu] Retourner le paragraphe le plus récent par document

n°1438731
Inekman
Posté le 07-09-2006 à 21:45:06  profilanswer
 

Salut,
 
J'ai fait une requête qui retourne la liste des paragraphes les plus récemment modifiés pour chaque document se trouvant dans ma base.
 
TParagraphe : idpara | iddoc | date
 
on a un jeu d'essai de ce style :
1, 1, 01/01/2006
1, 2, 02/02/2006
2, 1, 03/03/2006
 
L'exécution de la requête doit retourner logiquement ceci :
 
2, 1, 03/03/2006 // 2ème paragraphe du document 1
1, 2, 02/02/2006 // 1er paragraphe du document 2
 
La requête ci-dessous fonctionne mais le problème c'est qu'elle met 26 secondes pour s'exécuter :D  
 

SELECT t.idpara, t.iddoc, t.date
FROM TParagraphe AS t
WHERE t.date = (
SELECT max( date )
FROM TParagraphe AS t2
WHERE t.iddoc = t2.iddoc
GROUP BY t2.iddoc )
GROUP BY t.iddoc
ORDER BY t.date DESC
LIMIT 5


Une idée ? Une solution ? ^^


Message édité par Inekman le 07-09-2006 à 23:12:44
mood
Publicité
Posté le 07-09-2006 à 21:45:06  profilanswer
 

n°1438736
betsamee
Asterisk Zeperyl
Posté le 07-09-2006 à 22:02:55  profilanswer
 

Code :
  1. select t.idapra,t.idoc,t.date
  2. from TParagraphe t
  3. inner join
  4. (
  5. select idoc,max(date)
  6. from TParagraphe AS
  7. group by idoc
  8. )A on t.date=A.date and t.idoc=A.idoc


Message édité par betsamee le 07-09-2006 à 22:04:32
n°1438741
Inekman
Posté le 07-09-2006 à 22:09:25  profilanswer
 

Salut betsamee et merci pour ta participation.
 
" Unknown column 'A.date' in 'on clause' "
 
Voili :D

n°1438744
betsamee
Asterisk Zeperyl
Posté le 07-09-2006 à 22:14:17  profilanswer
 

Code :
  1. select t.idapra,t.idoc,t.date
  2. from TParagraphe t
  3. inner join
  4. (
  5. select idoc,max(date) as datemaxi
  6. from TParagraphe AS
  7. group by idoc
  8. )A on t.date=A.datemaxi and t.idoc=A.idoc

n°1438754
Inekman
Posté le 07-09-2006 à 22:26:51  profilanswer
 

Ayé j'ai trouvé :
 

Affichage des enregistrements 0 - 4 (5 total, traitement: 0.4732 sec.)


SELECT T.idpara, T.iddoc, T.date  
FROM TParagraphe AS T  
WHERE T.date =  
(
     SELECT MAX(T2.date)  
     FROM TParagraphe AS T2  
     WHERE T2.iddoc = T.iddoc
)  
ORDER BY T.date DESC LIMIT 5


Merci pour ta participation ;)
 
[EDIT]
Finalement ça repart en cacahuète dès que j'ajoute un nouveau champ issu d'une autre table :'(
 
Je veux à présent, en me basant sur la requête précédent qui marche, récupérer le titre du document auquel le paragraphe est rattaché :
 

SELECT T.idpara, T.iddoc, T.date, P.titre  
FROM TParagraphe AS T, TDocument AS P  
WHERE P.public = 1  
AND T.iddoc = P.iddoc
AND T.date =  
(
    SELECT MAX(T2.date)  
    FROM TParagraphe AS T2  
    WHERE T2.iddoc = T.iddoc
)  
ORDER BY T.date DESC LIMIT 5


Là ça repart sur des requêtes qui durent plus de 25 secondes à s'exécuter :'(


Message édité par Inekman le 07-09-2006 à 23:12:00
n°1439159
darkfrost
Posté le 08-09-2006 à 15:38:04  profilanswer
 

Je n'ai pas le temps de te faire la requête propre, mais tu pourrais essayer un truc du style :
 

Code :
  1. SELECT id_para, id_doc, date, titre
  2. FROM Para, Doc
  3. WHERE (id_doc, date) IN
  4. (SELECT id_doc, MAX(date)
  5. FROM Para
  6. GROUP BY id_doc)
  7. AND Para.id_doc = Doc.id_doc


 
Je n'ai pas vérifié que le résultat attendu était le bon mais je pense que oui et ça te fera très certainement gagner du temps car tu n'auras plus d'appel à ta premiere requete dans ta sous requete ;) !


Message édité par darkfrost le 08-09-2006 à 15:38:57
n°1439176
Inekman
Posté le 08-09-2006 à 15:49:34  profilanswer
 

Salut darkfrost, merci beaucoup pour ta participation.
 
Je viens de trouver une solution alternative qui répond finalement mieux à mon besoin. Plutôt que de prendre les paragraphes les plus récents et de retrouver les documents associés, j'ai pris le problème à l'envers et ça marche bien comme ça. Je prend les documents et pour chacun d'eux, je récupère le paragraphe le plus récent et voili.
 
Big merci à vous deux en tout cas.
 
PS : d'autant plus que chez moi les sous-requêtes fonctionnent, mais là où la page va être publiée ça marche pas (MySQL too old).


Message édité par Inekman le 08-09-2006 à 15:50:26

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

  [non résolu] Retourner le paragraphe le plus récent par document

 

Sujets relatifs
[xsl] [résolu] du rififi dans mon if :D[résolu]Argument en entrée
[Resolu] Formulaire dynamique avec checkboxs[C# XmlDocument] Ajout d'un noeud d'un document dans un autre ...
(Résolu) Net Use dans un fichier batch ( avec loggin)[Résolu] Positionnement DIV Css
[Résolu] Problème de syntaxe avec un define[Résolu)]Problème affectation chaine de caractère
[Resolu]C# Ouvrir un fichier via double click à partir de mon appli[résolu][PHP+Javascript] Pb de retours chariots
Plus de sujets relatifs à : [non résolu] Retourner le paragraphe le plus récent par document


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