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:
- 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 .
- 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 :)