2010-11-27 15 views
3

J'utilise cette requête pour imprimer un forum et tous ses sous-forums. Ce qui se passe, comme on peut s'y attendre, c'est que tous les messages de tous les sujets appartenant à ce forum sont affichés. Ce que je voudrais arriver est seulement le premier message de chaque fil est affiché avec le titre du forum.MySQL LIMIT 1 sur la deuxième table avec INNER JOIN

Requête:

SELECT tf_threads.*, tf_posts.* 
    FROM tf_threads INNER JOIN tf_posts 
    ON tf_threads.thread_id=tf_posts.thread_id 
     AND tf_threads.parent_id=54 ORDER BY tf_posts.date ASC

S'il vous plaît noter le champ parent_id est donné une variable dans la requête réelle.

Donc. Si j'ai un sens, quelqu'un peut-il m'aider à quelle question à écrire pour ne sélectionner que le premier message de chaque fil?

S'il n'y a pas de réponses simples (ish), comment pourrais-je le faire si j'ai utilisé un champ de numéro de poste dans la deuxième table, par exemple, le premier poste de discussion a le numéro 1 Si j'utilise cette méthode, je voudrais évidemment seulement sélectionner des postes avec un nombre de champ de 1. Je pourrais simplement développer la requête originale avec un AND post_number=1 à droite?

Merci pour la lecture,

James

Répondre

2

Quelque chose comme ça?

http://murrayhopkins.wordpress.com/2008/10/28/mysql-left-join-on-last-or-first-record-in-the-right-table/

Edit: Je pense que ce doit être quelque chose comme ça, mais je ne suis pas non plus un expert SQL:

SELECT tf_threads.*, tf_posts_tmp.* 
FROM tf_threads 
LEFT JOIN (SELECT p1.* 
      FROM tf_posts as p1 
      LEFT JOIN tf_posts AS p2 
      ON p1.postid = p2.postid AND p1.date < p2.date) as tf_posts_tmp 
ON (tf_threads.thread_id=tf_posts_tmp.thread_id) 
+0

Presque parfait! Je suis un vrai Nooblet MySQL, cependant, seriez-vous assez aimable pour me montrer comment incorporer cette méthodologie dans ma requête originale? S'il vous plaît :-) – Bojangles

+0

@JamWaffles: édité – thejh

+0

Merci beaucoup pour votre aide, mais cela ne fonctionnera pas. Je vais utiliser un champ de numéro de poste dans la base de données comme je l'ai dit dans mon OP. Désolée de vous avoir fait perdre votre temps. Je vais marquer cela, mais pas comme la bonne réponse - bien que ce soit simplement refusé de travailler pour moi. – Bojangles