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 :

[SQL] Dans un while avec fichier


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut [SQL] Dans un while avec fichier
    Bonjour tout le monde
    j'aimerais faire afficher dans un tableau, tous les fichier contenu dans un répertoire sur mon serveur
    jusqu'a là tout fonction
    par contre, il y a une colonne dans mon tableau que je souhaiterais faire afficher la dernière modification du fichier..qui est stocké dans ma bd

    je me pose la question, si je fais des requete à ma bd alors que je suis dans un while...est ce que ca ralentit vraiment mon script?? Ou encore est ce que c'est recommender de faire ainsi
    je vous mets mon code

    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
     
    //Ouverture du dossier avec le path de l'ajusteur et le nom du dossier concatené
    $dossierEnCour = opendir($path_dir);
    //On regarde tous les éléments du dossier
    while ($fichier = readdir ($dossierEnCour)) {
    	// on teste la valeur de l'élément
    	if ($fichier != "." && $fichier != ".."){
     
    		$tableau = explode (".", $fichier);
    		$nb_element = count($tableau)-1;
     
    		if($tableau[$nb_element] != "php" && $tableau[$nb_element] != "db"){
    //Je ferais ma requete de date de modification ici...retourne seulement un champs
    			echo"
    				<tr>
    					<td align=\"center\">
    						".$_SESSION['continuDossier']."
    					</td>
    					<td align=\"center\">
    						".$fichier." 
    					</td>
    					<td align=\"center\">
    						//Ici j'aimerais bien avoir la date de modification					</td>
    					<td align=\"center\">";
    						 echo '<a href="./download.php?file='.$fichier.'&dossierPath='.$path_dir.'">Telecharger le fichier</a>
    					</td>
    				</tr>
    			';
    		}
    	}
    }
    Alors ya une autre facon de procédé?
    J'ai essayé d'aller chercher directement la dernière modification sur le fichier...mais ce n'est pas ce que j'ai besoin...je veux la dernière ouverture, ou plutot la dernière fois que le fichier a été transféré sur le serveur...j'ai cette date dans ma bd

    Je fais quoi?
    merci pour vos conseils

  2. #2
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    oui, cette manière de faire est "couteuse" en ressources (cela depend tout de meme du nombre de tour de ton while et de la complexite et taille de ta requete).
    tu pourrais peut-être faire une requete au debut, qui te recupère ton identifiant de fichier avec la date qui va bien, tu te construit un bete tableau en php du genre $mon_tableau["id_fichier"]=ma_date
    et dans ton while qui parcourt on dossier tu utilises ton tableau...

    maintenant les tableaux à haute dose sont aussi gourmand en temps je crois, mais au moins ca t'evite un certains nombre d'accès à la bdd...

  3. #3
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Ouais comme tu dis, ce sont les accès à la bd qui me cause pb...
    Si je fait une requete avec les fichierId et le garde en tableau c'est p-e coteau aussi car dans la table fichier j'ai tout les fichiers...il peut y en avoir beaucoup, mais dans un dossier ca dépasse rarement 10


    Je ne crois pas qu'un tas de requete dans un while va etre apprécié par mon serveur et mon sgdb

    Ca peut ralentir bcp mon temps d'execution de script...je veux dire de facon remarquable?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je ne pense pas que les accès BDD soient vraiment très lents, surtout si tu as un index dans la table concernée.
    Cela dit, si vraiment tu veux limiter ces accès à la BDD, je peux te proposer une solution : lors du parcours de ton répertoire, tu ajoutes tous les fichiers valides à une variable de type tableau. Ensuite, tu construis ta requête en utilisant par exemple ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT ... WHERE filename IN('.implode(', ', $array).')';
    Ainsi, tu n'as qu'une seule requête contenant tous les résultats à modifier.

    [Edit] Modif de la requête ci-dessus car je t'ai lu trop rapidement. Tu parles de "retourner un seul résultat", j'ai donc supposé que tu faisais un SELECT, or ce n'est visiblement pas le cas. Pour faire un UPDATE (j'imagine que c'est ce que tu utilises), tu vas devoir le faire fichier par fichier, donc autant le faire dans la première boucle que tu as faite. Je ne vois pas comment l'améliorer mais peut-être serait-il intéressant de faire quelques tests de comparaison de vitesse.

  5. #5
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Oki merci pour vos suggestion
    Je me suis rendu compte qu'en plus de tout ca c'était une requete a multiple table
    mais heureusement j'ai un numéro de dossier qui est une clé
    Ca marche maintenant
    merci beaucoup pour la rapidité de réponse
    Bone fin de journée

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

Discussions similaires

  1. Ranger résultat sql dans un tableau avec while
    Par lemano dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2010, 10h36
  2. Réponses: 3
    Dernier message: 13/06/2008, 20h29
  3. Requete SQL dans boucle while
    Par vince_grenoblois dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 04/08/2006, 20h41
  4. [ACCESS] Syntaxe SQL dans un TQuery avec Requestlive=True
    Par Unusual_FL dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2005, 10h51

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