Comment faire ...?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment faire ...?

Re: Comment faire ...?

par mere-teresa » 07 févr. 2012, 11:26

Il se peux que j'ai besoin d'aide encore, au quel cas je posterais sur ce même topic
:non: nouvelle question, nouveau topic, stp
C'est pour la recherche des gens qui ont le même problème que ça aidera. Merci.

Re: Comment faire ...?

par Fre3z69 » 02 févr. 2012, 15:56

Pour l'heure j'ai régler le soucis du double affichage.

J'avais mal agencer ma requête.

Voici donc ma requête finale.
SELECT t_cat.cat_id, t_cat.cat_name, 
t_forum.forum_id, t_forum.forum_name, t_forum.forum_description,
t_group.group_id, t_group.group_color, 
r_users_isfrom_groupe.users_id, r_users_isfrom_groupe.group_id, 
t_topic.topic_id, t_post.post_id, t_post.post_date, t_post.users_id, 
t_users.users_id, t_users.users_name, 
t_last_post.post_id, t_last_post.forum_id, 
(SELECT COUNT(post_id) FROM t_post WHERE t_post.topic_id = t_topic.topic_id )AS Nbpost,
(SELECT COUNT(topic_id) FROM t_topic WHERE t_topic.forum_id = t_forum.forum_id ) AS Nbtopic
FROM t_cat
LEFT JOIN t_forum ON t_cat.cat_id = t_forum.cat_id
LEFT JOIN t_last_post ON t_last_post.forum_id = t_forum.forum_id
LEFT JOIN t_post ON t_post.post_id = t_last_post.post_id
LEFT JOIN t_topic ON t_forum.forum_id = t_topic.forum_id
LEFT JOIN t_users ON t_users.users_id = t_post.users_id
LEFT JOIN r_users_isfrom_groupe ON r_users_isfrom_groupe.users_id = t_users.users_id
LEFT JOIN t_group ON r_users_isfrom_groupe.group_id = t_group.group_id
ORDER BY cat_order, forum_order DESC
On liste bien le dernier post dans le forum souhaité.

Il se peux que j'ai besoin d'aide encore, au quel cas je posterais sur ce même topic

Merci de votre aide

Cordialement

Re: Comment faire ...?

par moogli » 02 févr. 2012, 14:37

salut,
Aidez moi SVP

Si j'ai pas cette requête, je ne peux pas avancer.
et ?

il te manque des group by pour les count sinon tu compte tout.

le plus simple étant de faire des sous requêtes.

quand au plus pro de faire une telle requête a chaque appel de la page, je ne suis pas certain vu les appels DB que cela engendre pour pas "grand chose". c'est un coup a saturer la base sur une requête complexe pour une petite fonctionnalités.

dans ce style (a tester)
SELECT t_cat.cat_id as, t_cat.cat_name,
tf.forum_id , t_forum.forum_name, t_forum.forum_description,
(select COUNT(post_id) from t_post where topic_id = tt.topic_id )AS Nbpost,
(select COUNT(topic_id) from t_topic where forum_id = tf.forum.id ) AS Nbtopic,
t_users.users_id
FROM t_cat
LEFT JOIN t_forum tf ON t_cat.cat_id = t_forum.cat_id
LEFT JOIN t_topic tt ON t_forum.forum_id = t_topic.forum_id
LEFT JOIN t_post ON t_topic.topic_id = t_post.topic_id
LEFT JOIN t_users ON t_post.users_id = t_users.users_id
ORDER BY cat_order, forum_order 
@+

Re: Comment faire ...?

par Fre3z69 » 02 févr. 2012, 13:06

Aidez moi SVP

Si j'ai pas cette requête, je ne peux pas avancer.

Merci de votre aide

Cordialement

Re: Comment faire ...?

par Fre3z69 » 30 janv. 2012, 21:08

Voici le récapitulatif (j'y comprend rien ^^)


Je le met en PDF pour que ça soit plus compréhensible

Lien du PDF

Merci de ton aide

Cordialement

Re: Comment faire ...?

par mere-teresa » 30 janv. 2012, 18:13

Tu ajoutes EXPLAIN devant ta requête et MySQL va analyser l'utilisation des indexes.

Code : Tout sélectionner

EXPLAIN SELECT t_cat.cat_id, t_cat.cat_name, t_forum.forum_id, t_forum.forum_name, t_forum.forum_description, COUNT(t_post.post_id) AS Nbpost, COUNT(t_topic.topic_id) AS Nbtopic, t_users.users_id FROM t_cat LEFT 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_topic.topic_id = t_post.topic_id LEFT JOIN t_users ON t_post.users_id = t_users.users_id ORDER BY cat_order, forum_order
à tester dans PHPMyAdmin ou autre frontend MySQL

Re: Comment faire ...?

par Fre3z69 » 30 janv. 2012, 17:50

comment je fait un explain??

Re: Comment faire ...?

par mere-teresa » 30 janv. 2012, 15:21

Et que donne le EXPLAIN de ta requête ?

Re: Comment faire ...?

par Fre3z69 » 30 janv. 2012, 11:22

J'ai essayer d'en mettre sur post-id et topic-id

Ça affiche bien Nbpost et Nbtopic

Merci

Cordialement

Re: Comment faire ...?

par mere-teresa » 30 janv. 2012, 11:03

As-tu mis des index sur tes champs ?

Re: Comment faire ...?

par Fre3z69 » 30 janv. 2012, 01:45

J'ai essayer de mémoire un truc, ça m'a l'air fonctionnel.
SELECT t_cat.cat_id, t_cat.cat_name, 
t_forum.forum_id, t_forum.forum_name, t_forum.forum_description,
COUNT(t_post.post_id) as Nbpost, 
COUNT(t_topic.topic_id) as Nbtopic, 
t_users.users_id
FROM t_cat
LEFT 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_topic.topic_id = t_post.topic_id
LEFT JOIN t_users ON t_post.users_id = t_users.users_id
ORDER BY cat_order, forum_order ASC
Je ne récupère qu'un champ avec cette requête, svp, pourriez vous m'aider à améliorer cette dernière, et l'optimiser

Cordialement

Ps: (Traitement en 0.0012 sec)

Re: Comment faire ...?

par Fre3z69 » 29 janv. 2012, 21:07

je préfère utiliser un count

ca me permettrais en même temps de pouvoir spécifier plus en détail dans chaque forum.

Enfin, voila, je préfère le count, mais je ne sais pas le faire dans ma requête, j'ai déjà vu des requête avec, mais je trouve plus où :oops:

Merci

Cordialement

Re: Comment faire ...?

par djtec » 29 janv. 2012, 15:59

Tu peux utiliser un count dans ta requête sql pour faire ça mais le plus simple est quand même de faire comme il dit c'est à dire de stocker les nombres dans des champs.

Et c'est sur qu'il y a des optimisations à faire dessus mais pour moi stocker dans des champs serait je pense (Et je dit bien je pense car je suis pas un pro dans le sql) est surment moins long à exécuter que de faire un count surtout que tu as déjà plusieurs jointure déjà et en rajouter pour les count je pense que cela alourdi le temps d'exécution de la requête.

Re: Comment faire ...?

par Fre3z69 » 29 janv. 2012, 13:17

Oui je me suis basé sur celui du SdZ, mais je compte optimisé le script, d'une part pour me permettre de faire moi même un forum, et d'autre part, parce qu'on as tout ce qu'il faut en php pour avoir cette requête.

Je sais qu'on a pas besoin de mettre le nombre de sujets dans la BdD, vu qu'on peux faire un comptage, et qu'avec ce dernier, on obtient le même résultat, et c'est plus "pro", enfin ça s'en approche ^^.

Ensuite, le tuto du SdZ, c'est une base, fonctionnelle, certes, mais pas à utilisée tel quel pour un forum en prod.
Il y a plein d'optimisations à apporter, et ainsi, on peux avoir un vrai forum, basé sur celui du tuto, qui est très bien soit dit en passant, mais mieux agencer.

Mon intérêt avant tout, est de faire "mon" forum, et pas d'en prendre un déjà existant.
J'exploite déjà phpbb, mais le but étant de créer mon forum, et pas prendre celui des autres ^^.

Merci en tout cas

Cordialement

Re: Comment faire ...?

par djtec » 29 janv. 2012, 12:46

Je crois bien que tu suis le tuto du site du zero et lui il les affiche tu as juste à faire tout ce qu'il dit.

Lui il utilise deux champs dans la table forum (forum_post, forum_topic) qu'il inclémente à chaque nouveau topic ou post et toi tu les à pas.

Donc si tu veux suivre le tuto fait le complètement car il fait tout ce qu'il faut dedans.