2010-04-15 9 views
2

J'ai certaine situation qui nécessite certains jeu de résultats de requête MySQL, nous allons voir la requête en cours d'abord & puis poser ma question:SQL: Limiter les lignes liées à chaque rejoint la ligne

SELECT 
    thread.dateline AS tdateline, post.dateline AS pdateline, MIN(post.dateline) 
    FROM thread AS thread 
     LEFT JOIN post AS post ON(thread.threadid = post.threadid) 
     LEFT JOIN forum AS forum ON(thread.forumid = forum.forumid) 
    WHERE post.postid != thread.firstpostid 
     AND thread.open = 1 
     AND thread.visible = 1 
     AND thread.replycount >= 1 
     AND post.visible = 1 
     AND (forum.options & 1) 
     AND (forum.options & 2) 
     AND (forum.options & 4) 
     AND forum.forumid IN(1,2,3) 
    GROUP BY post.threadid 
    ORDER BY tdateline DESC, pdateline ASC 

Comme vous pouvez le voir, surtout que je dois sélectionner Dateline de fils de la table « fil », en plus de Dateline du deuxième poste de chaque fil, qui est tout dans les conditions que vous voyez dans le CLAUSE WHERE. Étant donné que chaque fil a beaucoup de messages, et je n'ai besoin que d'un résultat par fil, j'ai utilisé GROUP BY CLAUSE à cette fin.

Cette requête renverra seulement un de Dateline de poste avec elle est liée fil unique.

Mes questions sont les suivantes:

  1. Comment limiter les discussions par retour chaque forum !? Supposons que je n'ai besoin que de 5 threads -comme un maximum- pour être retourné pour chaque forum déclaré en la clause WHERE 'forum.forumid IN (1,2,3)', comment cela peut-il être atteint .
  2. est-il des recommandations pour cette requête optimisation (bien sûr après avoir résolu le premier point)?

Notes:

  • Je préfère ne pas utiliser les sous-requêtes, mais si elle est la seule solution disponible je l'accepte. Double requêtes non recommandée. Je suis sûr qu'il ya une solution intelligente de cette situation.
  • J'utilise MySQL 4.1+, mais si vous savez la réponse pour un autre moteur, juste part.

conseils Apprécié à l'avance :)

Répondre

Questions connexes