Requetes php

Discussion dans 'Web, design' créé par DeScH, 12 Janvier 2007.

Statut de la discussion:
Fermée.
  1. Offline
    DeScH AstaLaVista
    Voila j'ai une qustion qui me trote dans la tete. Vaut-il mieux se connecter à la base de données plus longtemps et faire 4-5 requetes en une fois ou vaut-il mieux se connecter moins longtemps et faire 1 ou 2 requetes à la dois?

    Comment faire pour alléger les requetes en fait? y a-t-il moyen par des boucles? Car j'ai un probleme de lenteur sur mon site :-s

    Merci :)

    ps: J'ai besoin de +/- 4 requetes par page plus celle du forum phpbb
    DeScH, 12 Janvier 2007
    #1
  2. Offline
    zoheir cvm.mangaleet()
    Fais toutes tes requetes sur la meme connexion...
    Poste les afin de voir si y'a moyen de tuner tout ca :p
    zoheir, 12 Janvier 2007
    #2
  3. Offline
    DeScH AstaLaVista
    houla tu vas en avoir un paquet :D

    je les place après ;)
    DeScH, 12 Janvier 2007
    #3
  4. Offline
    DeScH AstaLaVista
    Code:
    $reqlastnews = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,15");
    $reqcontenu = mysql_query("SELECT * FROM news WHERE categorie='news' ORDER BY id DESC");
    $nbre_cont= mysql_query("SELECT COUNT(*) AS nbre_don FROM news");
    

    Voici les premieres, si on sait les modifier j'essaierai moi meme de tuner les autres :cool:

    Et aussi, comment faire pour utiliser le résultat d'une requête plusieurs fois? donc refaire un while du type while ($don =myssql_fetch_array($req)... sans devoir a chaque fois refaire la requete?
    DeScH, 12 Janvier 2007
    #4
  5. Offline
    zoheir cvm.mangaleet()
    Tu peux déjà executer ton count dans la 1ere/2eme requete en ajoutant un GROUP BY..
    zoheir, 12 Janvier 2007
    #5
  6. Offline
    II phl II Touriste
    Code:
    $reqlastnews = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,15");
    Je suppose que cette requête sert à lister les titres des 15 dernières news ... si c'est le cas tu n'es pas obligé de sélectionner l'ensemble de la table news.
    Donc SELECT * FROM news deviendrait SELECT title FROM news
    II phl II, 13 Janvier 2007
    #6
  7. Offline
    DeScH AstaLaVista
    oui. Oui en effet.
    Mais n'y a-t-il pas moyen de faire un mix pour n'avoir qu'une requete a la place de deux vu qu'on travaille sur la meme table?
    DeScH, 13 Janvier 2007
    #7
  8. Offline
    Bingo Beer Addict
    Tu peux supprimer la 3ème requête, si tu transformes la première en ajoutant "SQL_CALC_FOUND_ROWS", et si tu utilises "FOUND_ROWS()" juste après :

    $reqlastnews = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM news ORDER BY id DESC LIMIT 0,15");
    $nbre_cont= mysql_query("SELECT FOUND_ROWS() AS nbre_don");
    $reqcontenu = mysql_query("SELECT * FROM news WHERE categorie='news' ORDER BY id DESC");

    Enlever le "SELECT *" pour le remplacer par "SELECT <ce qu'il faut>" est de toutes façons absolument indispendable.

    Ensuite, pour ta requête "reqcontenu", tu peux essayer avec un index multi-colonnes: CREATE INDEX idx_news_categ_id ON news (categorie, id DESC);
    Si ça n'améliore rien, n'oublie pas de supprimer l'index pour ne pas que le serveur continue à le mettre à jour (ça pénaliserait un peu les performances).
    Bingo, 14 Janvier 2007
    #8
Statut de la discussion:
Fermée.