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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Forum] Préparer un array au login ou faire une requête sql : le plus performant


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut [Forum] Préparer un array au login ou faire une requête sql : le plus performant
    Bonjour,

    Je fais la refonte d'un site avec une base de données et j'ai 2 possibilités de travailler :

    1. créer un array au login avec les informations utiles et il est mit en session (qui serait mit à jour si une nouvelle données)
    2. faire une requête sql quand les données sont nécessaires

    Quelqu'un peut me dire la méthode qui serait la plus rapide, la plus efficace ?

    Je dois dire qu'il s'agirait de plusieurs array à 2 dimensions avec plus de 1.000 lignes chacun : liste des codes postaux - liste des vétérinaires - liste des compagnies d'assurance - etc ...

    Ce que je fais :
    1. j'affiche la valeur d'un élément lors de l'affichage
    2. j'affiche la valeur + la liste complète si c'est une modification

    Je me doute que le array va prendre de la place place mémoire.
    Je suis sur un hébergement mutualisé.

    Pouvez-vous me conseiller sur la meilleure méthode à utiliser.

    D'avance merci,
    ddaweb

  2. #2
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    J'ai vite écrit comment je travaillerais avec un array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // --------------- Création du ARRAY et mise en SESSION au login
    $reponse=mysqli_query($conn, "SELECT vetos_id, vetos_nom, vetos_prenom, vetos_ville, id_postal, full_postal
    	FROM 03_chien_vetos v 
    	INNER JOIN 02_prop_postal p ON v.vetos_ville=p.id_postal 
    	ORDER BY vetos_nom ASC") or die(mysqli_error($conn));
    while ($in= mysqli_fetch_array($reponse)) {
    	$vetos_id=$in['vetos_id'];
    	$vetos_nom=$in['vetos_nom'];
    	$vetos_prenom=$in['vetos_prenom'];
    	$vetos_full_postal=$in['full_postal'];
     
    	$array_vetos[$vetos_id][id]=$vetos_id;
    	$array_vetos[$vetos_id][prenom]=$vetos_prenom;
    	$array_vetos[$vetos_id][nom]=$vetos_nom;
    	$array_vetos[$vetos_id][postal]=$vetos_full_postal;
    }
     
    // --------------- Afficher la valeur à l'affichage
    print "$array_vetos[$vetos_db][nom] $array_vetos[$vetos_db][prenom] - $array_vetos[$vetos_db][postal]";
     
    // --------------- Afficher la liste déroulante à la modification
    print "<select>";
    	print "<option value=\"$array_vetos[$vetos_db][id]\">$array_vetos[$vetos_db][nom] $array_vetos[$vetos_db][prenom] - $array_vetos[$vetos_db][postal]</option>"; // ----- valeur actuelle
     
    	foreach ($array_vetos AS $boucle1) { // ----- Liste complète
                 if ( !in_array( $vetos_db ) ) {
    		foreach ($boucle1 AS $boucle2) {
    			$veto_liste_id=$boucle2[id];
    			$veto_liste_prenom=$boucle2[prenom];
    			$veto_liste_nom=$boucle2[nom];
    			$veto_liste_postal=$boucle2[postal];
    			print "<option value=\"$veto_liste_id\">$veto_liste_nom $veto_liste_prenom - $veto_liste_postal</option>";
    		}
                }
    	}
    print "</select>";
    Via les requêtes SQL, j'utilise une fonction pour l'affichage et la requête ci-dessus pour la liste.

    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function RechercherVetosID ($id_vetos, $conn) {
    	$vetos=mysqli_query($conn, "SELECT vetos_id, vetos_nom, vetos_prenom, vetos_ville, vetos_actif , id_postal, full_postal 
    		FROM 03_chien_vetos v 
    		LEFT JOIN 02_prop_postal p ON v.vetos_ville=p.id_postal 
    		WHERE vetos_id='$id_vetos'");
    	while ($in= mysqli_fetch_array($vetos)) {
    		$vetos_id_db=$in['vetos_id'];
    		$vetos_nom=$in['vetos_nom'];
    		$vetos_prenom=$in['vetos_prenom'];
    		$vetos_full_postal=$in['full_postal'];
    		$vetos_postal=$in['vetos_ville'];
    		$vetos_actif=$in['vetos_actif'];
     
    		$array_vetos=array($vetos_id_db,$vetos_nom,$vetos_prenom,$vetos_postal,$vetos_full_postal,$vetos_actif);
    	}
    	return ($array_vetos); // ----- 0: ID véto - 1: Nom - 2: Prénom - 3: ID postal - 4: Full postal - 5: Véto actif
    }

  3. #3
    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
    Tu réponds toi même à la question : faut-il lire les données dont on n'en a pas besoin ?
    Une base de donnée est faite pour être interrogée, ce n'est pas un stockage mort.
    De même l'utilisateur a t'il besoin d'une liste de 1000 lignes ? Il vaut mieux utiliser des filtres et éventuellement une pagination.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu réponds toi même à la question : faut-il lire les données dont on n'en a pas besoin ?
    Une base de donnée est faite pour être interrogée, ce n'est pas un stockage mort.
    De même l'utilisateur a t'il besoin d'une liste de 1000 lignes ? Il vaut mieux utiliser des filtres et éventuellement une pagination.
    Cette interface web est la gestion complète des cours de notre club de chien, un mini SAP qui gère les membres, les chiens, les cours et la comptabilité.

    A plusieurs endroits je suis susceptible de consulter les données et ne concerne pas qu'un seul membre, mais le membre sur lequel on travaille.

    Vu le nombre de requêtes que je fais, je me posais la question si cela ne serait pas plus intéressant de mettre en array les valeurs régulièrement utilisées avant même de passer à la page de gestion (c'est à dire au login) et donc de les réutiliser au besoin au lieu de faire une requête à chaque fois (une façon de faire une table temporaire) ?
    Cet array ne contient pas toutes les valeurs des tables qui le construit (je ne mets en array que ce que j'ai besoin pour la gestion).

    Actuellement, c'est le mode requête qui est utilisé, je cherche à rendre l'affichage de la page plus rapide possible en optimisant mon code et requête au maximum ... mais je ne suis qu'un novice en PHP - MySQL.
    L'optimisation des requêtes a déjà eu un effet visible, je profite que je réécrit tout pour utiliser d'autres méthodes.

  5. #5
    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
    Tu devrais alors peut être plutôt t'interesser à Ajax qui te permet de ne pas recharger la page complète mais seulement certains éléments.
    Par exemple, tu interroges la bdd pour avoir les informations d'un chien mais ta liste de vétérinaire en dessous ne change pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu devrais alors peut être plutôt t'interesser à Ajax qui te permet de ne pas recharger la page complète mais seulement certains éléments.
    Par exemple, tu interroges la bdd pour avoir les informations d'un chien mais ta liste de vétérinaire en dessous ne change pas.
    J'avoue que ajax ou jquery sera la future évolution, mais je dois encore apprendre

    Ici c'est pour mettre en mémoire des valeurs qui seront utilisées soit pour une seule valeur, soit pour faire une liste déroulante de toutes les valeurs pour faire une modification sur un membre ou chien suivant les cas.
    On a écrit ensemble ... loool : non la liste des vétérinaires ne change pas, éventuellement on peut y ajouter un nouveau, je réécrirais cette ligne dans le array.

    C'est juste une question de performance d'affichage de la page, en tenant compte des éventuels problèmes de mémoire utilisée par le serveur.
    Lire un array est-il plus rapide que de faire la requête, surtout qu'il y a de 1.000 à 2.000 lignes à afficher pour la liste déroulante ?

  7. #7
    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
    Les performances doivent être sensiblement les mêmes. Ca serait de la fausse optimisation alors qu'il y a beaucoup plus a gagner avec Ajax.
    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. [WD16] Faire une requête SQL sur une table ?
    Par EriCstoFF dans le forum WinDev
    Réponses: 9
    Dernier message: 01/09/2011, 10h16
  2. [XL-2007] Faire une requête SQL
    Par Pynouz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2010, 17h15
  3. Faire une Requête SQL
    Par Vincinho dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/02/2010, 12h43
  4. Comment faire une requête Sql en VB
    Par Menontona dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/03/2009, 11h33
  5. Comment faire une requête SQL dans un datatable
    Par Passepoil dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/02/2007, 20h24

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