IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Question conseil d'optimisation BDD vs script [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut Question conseil d'optimisation BDD vs script
    Bonjour à tous,

    Voila, je cherche conseil auprès des expérimentés.J'ai plusieurs tables dans une bdd et je souhaite afficher tous les éléments de la base sur ma page
    d'accueil.

    Pour l'instant j'ai crée un objet pour chacune des tables avec une méthode getAll() qui renvoie tous les éléments de la table sans distinction (avec
    SELECT puis fetchAll()).

    Ma question est la suivante:
    Sachant qu'il y aura des options de tri sur cette même page, est-il préférable de charger tous les éléments des tables dans des tableaux associatifs respectifs puis de faire les traitements sur les tableaux ou bien de créer des requêtes PDO qui sélectionnent les éléments des tables en fonctions des tris souhaités par les utilisateurs et n'avoir dans des tableaux que les sélections souhaitées.

    Exemple: Pr trier par date: soit faire un select avec classement par date, Soit sélectionner tout dans un tableau puis le trier les éléments du tableau par date.

    Il faut prendre en considération que les tables peuvent comporter un grand nombre d'éléments.

    Question Bonus:
    Est ce que qqn peut m'orienter sur la façon de découper les éléments des tables en n'affichant que 10 par page avec succession de page. (du pseudo-code ça le ferait bien).

    Grand merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quel serait l'avantage de trier en PHP ?
    C'est purement le boulot de la base de données.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut A priori
    Salut,

    A priori jme disais, avec le peu de connaissances que j'ai en la matière, que les requêtes SQL étaient plus longues à exécuter que celles en PHP.

    C'est pour ça que jvoulais savoir quelles sont les conclusions tirées par les habitués de la manœuvre.

    Edit: je pense utiliser LIMIT x, y en sql, c'est les conseils que j'ai trouvé sur un autre forum.

  4. #4
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Je confirme ce qu'a dit Sabotage, le tri, c'est clairement le boulot de la base de donnée, elle est faite pour ca, et tu ne pourras pas, en php, faire un algo plus rapide que ce que te renvois la base.
    Si tu as des problèmes de perfs, tu peux même créer des index sur les champs de tri (mais ca, on y songe seulement si on constate de vrai problème, à priori je ne pense pas que tu en sois déjà là).

    Pour afficher 10 par 10, généralement les bases (genre mysql au hasard), offre un système pour ne retourner que x élément à partir du n°y.

    En pseudo code ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Pour afficher les liens vers la page, avec le numero de page de debut
    // nbEnregistrement est le nombre d'enregistrement total dans la table.
    $j = 0;
    for (i = 0; i < nbEnregistrements; i = i + 10) {
       $j++;
       echo ('<a href="mapage.php?debut=i">$j </a>');
    } 
     
    //Et la requête un truc du genre :
    $req = 'select * from matable limit ' . $_GET['debut'] . ', 10';
    // Fetch de tes résultats.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut Merci mais.
    Salut,

    Merci pour cette réponse efficace . En appliquant ce que tu me dit, je tombe sur un autre problème, apparemment rencontré par de nombreux utilisateurs de PDO, auquel je n'ai pas trouvé de solution précise.

    Quand je fais un prepare statement avec PDO pour une requête contenant une LIMIT dont les arguments sont des variables, j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1' in [...]
    le select preparé est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $this->ma_methode= $db->prepare(SELECT * FROM ma_table ORDER BY date DESC LIMIT ?, ?); 
     
    //dont la methode est:
     
        public function ma_methode($x, $y)
        {
            $this->ma_methode->execute(array($x, $y)); //l'erreur est indiquée à cette ligne
            return $this->ma_methode->fetchAll();
        }
    appelée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_objet->ma_methode(0,10);
    Ici le 0 et le 10 sont devenus '0' et '10' et je pense que le pb vient de là. J'ai essayé de caster, sans résultat. Est ce que qqn aurait une solution (aussi claire que la precedente ?)

    Thanks!

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. demande de conseil pour optimiser mon script
    Par seb.garcia dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 11/05/2011, 16h03
  2. Questions concernant l'optimisations d'une BDD Mysql
    Par ChriGoLioNaDor dans le forum Requêtes
    Réponses: 0
    Dernier message: 22/04/2008, 09h55
  3. [SQL2K][TSQL]Création de BDD via script.
    Par Spiegel dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 28/03/2006, 11h08
  4. Réponses: 4
    Dernier message: 26/01/2006, 10h35
  5. optimiser BDD pr requete
    Par xopos dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/02/2005, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo