Compter le nombre de messages dans un forum

Eléphant du PHP | 418 Messages

07 mars 2012, 02:02

Salut à vous

Voici le problème.

J'ai constater sur mon forum, que j'ai un soucis lors de l'affichage du nombre de post (messages) dans un forum.

En effet ce chiffre est complément erroné.

Voici ma requête. Il s'agit de la partie (SELECT COUNT(post_id) FROM t_post WHERE t_topic.topic_id = t_post.topic_id) AS Nbpost
SELECT 
 t_cat.cat_id,
 t_cat.cat_name,
 t_forum.cat_id,
 t_forum.forum_id,
 t_forum.forum_name,
 t_forum.forum_description,
 t_forum.forum_auth_view,
 t_topic.topic_id,
 t_post.post_id,
 t_post.post_date,
 t_post.users_id,
 t_topic_view.users_id AS view_id,
 (SELECT COUNT(topic_id) FROM t_topic WHERE t_topic.forum_id = t_forum.forum_id) AS Nbtopic,
 (SELECT COUNT(post_id) FROM t_post WHERE t_topic.topic_id = t_post.topic_id) AS Nbpost
  FROM t_cat
  INNER JOIN t_forum 
                              ON t_cat.cat_id = t_forum.cat_id
  LEFT JOIN t_topic 
                              ON t_forum.forum_id = t_topic.forum_id
  LEFT JOIN t_post 
                              ON t_post.topic_id = t_topic.topic_id
  LEFT OUTER JOIN t_topic_view
                              ON t_post.topic_id   = t_topic_view.topic_id
                              AND t_topic_view.users_id  = :usersid
WHERE forum_auth_view <= :rank_id 
                              AND t_cat.cat_id = t_forum.cat_id
ORDER BY t_cat.cat_order, t_forum.forum_order, t_post.post_id DESC
J'ai tester, mais en vain. Il s'agit de la partie (SELECT COUNT(post_id) FROM t_post WHERE t_topic.forum_id = t_forum.forum_id) AS Nbpost
SELECT 
 t_cat.cat_id,
 t_cat.cat_name,
 t_forum.cat_id,
 t_forum.forum_id,
 t_forum.forum_name,
 t_forum.forum_description,
 t_forum.forum_auth_view,
 t_topic.topic_id,
 t_post.post_id,
 t_post.post_date,
 t_post.users_id,
 t_topic_view.users_id AS view_id,
 (SELECT COUNT(topic_id) FROM t_topic WHERE t_topic.forum_id = t_forum.forum_id) AS Nbtopic,
 (SELECT COUNT(post_id) FROM t_post WHERE t_topic.forum_id = t_forum.forum_id) AS Nbpost
  FROM t_cat
  INNER JOIN t_forum 
                              ON t_cat.cat_id = t_forum.cat_id
  LEFT JOIN t_topic 
                              ON t_forum.forum_id = t_topic.forum_id
  LEFT JOIN t_post 
                              ON t_post.topic_id = t_topic.topic_id
  LEFT OUTER JOIN t_topic_view
                              ON t_post.topic_id   = t_topic_view.topic_id
                              AND t_topic_view.users_id  = :usersid
WHERE forum_auth_view <= :rank_id 
                              AND t_cat.cat_id = t_forum.cat_id
ORDER BY t_cat.cat_order, t_forum.forum_order, t_post.post_id DESC
Tout est affiché normalement (sauf le système lu non lu, que j'arrive pas à faire, mais c'est pas le sujet).

Comment compteriez vous le nombre de messages total contenu dans un forum, je ne vois plus comment faire cela.

Merci de votre aide

Cordialement

Ps: Vous pouvez vous faire une idée ici.

ViPHP
xTG
ViPHP | 7331 Messages

07 mars 2012, 10:25

Utilises des alias pour les tables, car là par exemple tu utilises deux fois t_topic donc savoir lequel prendre est difficile pour lui. ;)

Eléphant du PHP | 418 Messages

07 mars 2012, 14:52

Bon t_topic c'est qu'une seul table??

Je comprend pas bien se que tu me dit, peux tu me montrer un exemple??

Merci de ton aide

Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

07 mars 2012, 15:41

Tu manipules dans ta requête deux pointeurs vers la table topic justement...
Une dans la requête principale et une dans la sous-requête.
Et de même pour la table forum.
Donc du coup tu mélanges un peu tous les parcours de pointeur.

Si tu préfères on peut faire l'analogie d'une table ne modification.
Deux utilisateurs la modifie. Mais ils ne savent pas s'ils travaillent sur leur outil ou bien sur l'outil de l'autre personne (notion de pointeur derrière ça).
Donc du coup ils modifient les données qu'ils proviennent de la bdd ou bien qui viennent des modifications de l'autre personne ?
Comme ils ne savent pas sur quel outil ils sont on ne peut pas répondre à cette question.

Là c'est pareil, tu mélanges deux accès aux tables et le moteur SQL ne sait pas lequel prendre donc du coup il fait des siennes.

Eléphant du PHP | 418 Messages

07 mars 2012, 16:40

Edit:

J'ai retrouver comment faire
...

(SELECT COUNT(post_id) FROM t_post AS post
LEFT JOIN t_topic AS topic ON post.topic_id = topic.topic_id
WHERE topic.forum_id = t_forum.forum_id) AS Nbpost

...
Ca fonctionne, et tu constateras que j'ai mit des allias ^^

Merci de votre aide

Cordialement