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 :

Eviter de faire 20 requêtes pour un affichage


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2015
    Messages : 8
    Par défaut Eviter de faire 20 requêtes pour un affichage
    Bonjour,

    Je dois développez sur une page, un affichage de stock que je dois ensuite disposer par catégories dans différents blocs (CSS).

    Je peux le réaliser très simplement en faisait 20 requêtes mysql dans la page où se trouve les différents blocs (j'ai 20 catégories différentes).

    Je me suis dit que cela serait stupide et qu'en une seule requête je pourrais m'en sortir. J'ai donc essayé de tout stocker dans un tableau et de trier les résultats (avec l'aide d'un admin ici). Mais maintenant à par faire 20 conditions IF pour chaque bloc et afficher, je reviens un peu à la même conclusion.

    C'est une BDD avec environ 30000 lignes, la requête va uniquement chercher maximum 60 lignes avec le where. Et j'ai juste 4/5 colonnes à récupérer.
    Faire 20 requêtes pourrait le faire, mais auriez-vous une idée plus pro ?

    Merci d'avance à vous

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Par défaut
    Hello,

    Tu utilises un framework ? Quelque chose ?

    le top du top serait de faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach($categories as $category) {
    echo '<div>';
    echo '<span>'.category->name.'</span>;
    echo '<ul>';
    foreach($category->getStock() as $stock) {
    echo '<li>'.$stock->name.'</li>;
    }
    echo '</ul>';
    echo '</div>';
    }

    Mais là tu referas tes 20 requêtes (dans le getStock)... J'pense que faire 20 requête c'est pas "grave" et avec ces 20 reqûetes ton code sera beaucoup plus lisible et maintenable (et facile à écrire) que si tu fais une grosse requête avec derrière un traitement lourds pour afficher la données...

    En espérant t'avoir aidé ^^

    AlexL

  3. #3
    Membre très actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Par défaut
    Hello,

    Je te recommande ceci :
    - avoir une solution fonctionnelle sur un petit jeu de données
    - détecter les goulots d'étranglement sur les performances lors d'un appel à la base et affichage dans le front (2 étapes) (voir onglet Réseau de Firebug)
    - optimiser le code / revoir la stratégie d'appel / d'affichage pour accélérer le process.
    - tester et corriger sur un jeu de données plus grand

    Dans un premier temps, montre-nous ta requête ainsi que le schéma complet de ta base de données (tables, liens, ...).
    On se posera les questions suivantes :
    - Pouvons-nous améliorer / optimiser / simplifier la requête ?
    - Combien de temps moyen nous prend t'elle ?
    - Quel est l'avantage / le temps pris à gérer une requête globale ou plein de petites requêtes ?
    - Sous quelle forme retournes-tu tes données du back-end au front-end ?
    - Appliques-tu des traitements côté backend sur les données avant le retour au front end ?
    - Appliques-tu des traitements côté frontend une fois les données obtenues pour l'affichage ?
    - Respectes-tu les responsabilités de ton client, ton serveur et ta base ?

    Revoir un peu la stratégie d'appel :
    - faire un appel de méthode de ton frontend (interface graphique client web) vers ton backend PHP. Du genre getAllMyDatas()
    - Côté PHP, développer ton getAllMyDatas() et effectuer :
    -------- une unique requête SQL à ta base avec plein de jointures pour retourner les données sous forme d'un gros objet (JSON ?) que tu formateras côté front dans ton tableau HTML
    -------- plein de petites requêtes SQL à ta base. Puis, tu construis un objet PHP unique avec tes données que tu retournes côté front (en JSON) pour formater dans ton tableau HTML

    En gros, tu n'auras qu'un simple aller-retour de ton front-end à ton backend et une ou plusieurs connexions de ton backend à ta base SQL.

    Essaies de découper les tâches et d'identifier ce qui te coûte en temps.
    Si déjà tu récupères tes données non triées de ta base à ton front end, est-ce que tu peux pas gagner plus en perf ?
    Ensuite, tu peux toujours reporter ton filtre / tri sur le frontend après avoir rappatrié tes données.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    poste le code de génération de la page en question

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2015, 15h13
  2. Faire une requête pour 1 pays et le reste du monde
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/06/2010, 09h30
  3. Réponses: 2
    Dernier message: 27/05/2009, 19h54
  4. Faire une requête pour Access selon des Checkbox
    Par Invit-é dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/06/2007, 16h57
  5. Eviter de faire 3 requêtes similaires
    Par rcan7412 dans le forum Access
    Réponses: 22
    Dernier message: 07/03/2007, 12h51

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