2010-02-06 14 views
0

Sur la page d'accueil de mon site Web, je veux afficher les derniers messages sur le forum, mais je ne veux pas montrer le même sujet deux fois. Comment puis-je modifier le code ci-dessous pour ce faire?SQL - comment extraire des sujets de forum qui ne sont pas répétés?

http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts

montrent notamment les derniers messages, mais une seule fois pour chaque sujet/discussion sur le forum.

+1

Regardez comme vous utilisez un objet de base de données personnalisée, et qui sait comment cet objet de base de données personnalisée que vous utilisez des œuvres ! Sans voir le code source pour cela, nous ne pouvons pas vous dire de façon fiable comment modifier le tableau que vous transmettez à la fonction build_query pour qu'il produise la requête MySQL valide. Vous obtiendrez des réponses sur la façon de changer la requête, mais à moins que vous ne sachiez comment changer l'objet pour obtenir la nouvelle requête, vous n'obtiendrez probablement pas une bonne réponse ici. –

+0

J'utilise l'application open source php PunBB. Je suis perdu et confus; ( –

Répondre

1

Si vous voulez une seule valeur par sujet, vous pouvez regrouper par sujet, et à partir de chaque sujet, sélectionnez l'article le plus récent. Ensuite, vous pouvez choisir les 10 meilleurs sujets.

Je vais écrire dans SQL, et vous pouvez traduire à PHP:

SELECT p.id, p.message, o.subject 
FROM 
((SELECT t.id 
    FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id 
    GROUP BY t.id 
    HAVING p.posted = MAX(p.posted)) ids LEFT JOIN topics AS t ON ids.id = t.id) o 
             LEFT JOIN posts AS p ON o.id = posts.topic_id 
ORDER BY p.posted DESC 
LIMIT '0,10' 
1

changez cette ligne

'SELECT' => 'p.id, p.message, t.subject', 

à

'SELECT DISTINCT' => 'p.id, p.message, t.subject', 
+0

n'a pas semblé fonctionner.) MySQL devrait-il le supporter? –

+2

MySQL devrait le supporter, mais cela ne marchera pas, car 'p.id' sera toujours différent pour chaque publication –

3

Ajouter une condition de ne conserver que les dossiers où le poste est le dernier message du sujet:

WHERE p.id = (
    SELECT pp.id 
    FROM posts AS pp 
    WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1 
) 
+0

Je ne suis pas bon à sql, donc je suis un peu confus où cette déclaration "où" va, pouvez-vous s'il vous plaît me donner la déclaration complète sql? –

+0

Il va entre JOINS et ORDER BY comme ceci: ''WHERE' => 'p .id = (...) ', ' – Leventix

+0

Malheureusement, je ne sais pas comment cette bibliothèque php construit les instructions sql donc ce qui précède n'a pas fonctionné.J'utilise l'application de forum PunBB. –