Question à propos d'une requête

Question à propos d'une requête - PHP - Programmation

Marsh Posté le 06-06-2004 à 13:22:46    

Salut,
J'ai fait une requête qui retire des messages de mon phpbb, mais le problème, c'est qu'à la fin, j'ai mis "ORDER BY topic_id DESC" et le serveur de mon hébergeur payant était presque HS...
Voici la requête en question :
 

Code :
  1. "SELECT phpbb_topics.forum_id, phpbb_topics.topic_id, phpbb_topics.topic_title, phpbb_topics.topic_time, phpbb_posts_text.post_text,phpbb_posts_text.bbcode_uid,phpbb_users.username FROM phpbb_topics, phpbb_posts,phpbb_posts_text, phpbb_users WHERE
  2. phpbb_topics.article = ‘1’
  3. AND phpbb_topics.topic_poster = ‘phpbb_users.user_id’
  4. AND phpbb_topics.topic_id = phpbb_posts.topic_id
  5. AND phpbb_posts.post_id = phpbb_posts_text.post_id
  6. AND phpbb_users.user_id = phpbb_topics.topic_poster
  7. AND phpbb_topics.forum_id = '1'
  8. OR phpbb_topics.forum_id = '2'
  9. OR phpbb_topics.forum_id = '3'
  10. OR phpbb_topics.forum_id = '21'
  11. ORDER BY phpbb_topics.topic_id DESC
  12. LIMIT 0,15"


 
J'ai vu la fonction array multisort() qui à ce qu'il parait, permet de faire comme order by.
 
Alors, voici ce que je pensais faire :

Code :
  1. $requete = "SELECT phpbb_topics.forum_id, phpbb_topics.topic_id, phpbb_topics.topic_title, phpbb_topics.topic_time, phpbb_posts_text.post_text, phpbb_posts_text.bbcode_uid, phpbb_users.username FROM phpbb_topics,phpbb_posts,phpbb_posts_text,phpbb_users WHERE
  2. phpbb_topics.article = ‘1’
  3. AND phpbb_topics.topic_poster = ‘phpbb_users.user_id’
  4. AND phpbb_topics.topic_id = phpbb_posts.topic_id
  5. AND phpbb_posts.post_id = phpbb_posts_text.post_id
  6. AND phpbb_users.user_id = phpbb_topics.topic_poster
  7. AND phpbb_topics.forum_id = '1'
  8. OR phpbb_topics.forum_id = '2'
  9. OR phpbb_topics.forum_id = '3'
  10. OR phpbb_topics.forum_id = '21'
  11. DESC
  12. LIMIT 0,15";


 
Après je fais :
 

Code :
  1. $row = mysql_fetch_array($requete);
  2. foreach ($arr as $key => $row) {
  3.    $topic_id[$key] = $row["topic_id"];
  4. }
  5. array_multisort($topic_id, SORT_DESC, $arr);


 
Mais après je ne sais pas trop comment faire pour pouvoir afficher les 15 enregistrements que j'ai demandé et qui ont été classés.
 
Par exemple, ca pourrait etre ca :
 

Code :
  1. <?php
  2. // on ouvre une connexion sql
  3. $requete = "SELECT phpbb_topics.forum_id, phpbb_topics.topic_id, phpbb_topics.topic_title, phpbb_topics.topic_time, phpbb_posts_text.post_text, phpbb_posts_text.bbcode_uid, phpbb_users.username FROM phpbb_topics,phpbb_posts,phpbb_posts_text,phpbb_users WHERE
  4. phpbb_topics.article = ‘1’
  5. AND phpbb_topics.topic_poster = ‘phpbb_users.user_id’
  6. AND phpbb_topics.topic_id = phpbb_posts.topic_id
  7. AND phpbb_posts.post_id = phpbb_posts_text.post_id
  8. AND phpbb_users.user_id = phpbb_topics.topic_poster
  9. AND phpbb_topics.forum_id = '1'
  10. OR phpbb_topics.forum_id = '2'
  11. OR phpbb_topics.forum_id = '3'
  12. OR phpbb_topics.forum_id = '21'
  13. DESC
  14. LIMIT 0,15";
  15. $row = mysql_fetch_array($requete);
  16. foreach ($arr as $key => $row) {
  17.    $topic_id[$key] = $row["topic_id"];
  18. }
  19. WHILE (array_multisort($topic_id, SORT_DESC, $arr))
  20. {
  21. // la on affiche les enregistrements
  22. }
  23. ?>


 
Alors, je sais pas si ce code est juste, d'ailleurs ca m'étonnerait... Donc si vous avez des solutions, je suis preneur!
 
Sinon, à votre avis, c'est order by ou desc qui fait bloquer ?
 
@+ et merci d'avance!


Message édité par PACMaN2002 le 06-06-2004 à 13:24:01
Reply

Marsh Posté le 06-06-2004 à 13:22:46   

Reply

Marsh Posté le 06-06-2004 à 14:31:33    

hmmm quelque simplifications de la requete sont envisageable

Code :
  1. SELECT t.forum_id, t.topic_id, t.topic_title, t.topic_time, pt.post_text,pt.bbcode_uid,u.username
  2. FROM phpbb_topics as t, phpbb_posts as p,phpbb_posts_text as pt, phpbb_users as u
  3. WHERE t.article = 1
  4. AND t.topic_poster = u.user_id
  5. AND t.topic_id = p.topic_id
  6. AND p.post_id = pt.post_id
  7. AND u.user_id = t.topic_poster
  8. AND t.forum_id IN (1,2,3,21)
  9. ORDER BY t.topic_id DESC
  10. LIMIT 0,15"


 
 ;)


Message édité par Profil supprimé le 06-06-2004 à 14:32:05
Reply

Marsh Posté le 06-06-2004 à 18:02:12    

Grâce à ce que tu m'as donné, la génération de ma page est passée de 0.9 secondes à 0.1 sur easy php :D  
Merci bien héhé

Reply

Marsh Posté le 06-06-2004 à 18:03:37    

mais de rien, j'ai juste mis des alias pour tes tables et ai simplifié ton OR pour chaque id de forum


Message édité par Profil supprimé le 06-06-2004 à 18:03:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed