Optimisation lecture base de donnée

Neimad94 -  
cyril1982 Messages postés 110 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je souhaiterais optimiser, si cela est possible, une requête qui est censée récupérer l'adresse d'une image et l'afficher. La base de donnée contient 490 000 lignes et je dois afficher toutes les images de ma base de donnée. Ci-dessous le code utilisé.

for ($i=1 ; $i<701; $i++)
				{
				for($j=1; $j<701; $j++)
					{
					$req="SELECT urlimage FROM grille2 where numligne=$i and numcolonne=$j";
					$donne= $bdd->query ($req);
					while ($data = $donne->fetch())
						{
						$url=$data['urlimage'];
						print '<img src="'.$url.'" alt="texte alternatif" />';
						
						}
					
					}
				}
			$donne->closeCursor();


Merci d'avance pour votre aide





A voir également:

3 réponses

cyril1982 Messages postés 110 Date d'inscription   Statut Membre Dernière intervention   12
 
Bonjour,

La première chose à faire est de ne faire qu'une seule requête au lieu de 490000 !!!!

$req="SELECT urlimage FROM grille2 ";
$donne= $bdd->query ($req);
while ($data = $donne->fetch())
 {
    $url=$data['urlimage'];
    print '<img src="'.$url.'" alt="texte alternatif" />';      
 }
$donne->closeCursor();
0
Neimad94
 
Hummmmm......Désolé, j'ai mal exposé mon problème. En fait dans ma table j'ai un champ actif (0 ou 1) et 2 champs url image (url 1 si actif 0 et url 2 si actif 1).
L'image s'affiche donc en fonction du champ actif et dans tous les cas je veux afficher TOUTES les images.

Exemple :

Ligne Colonne Actif URLimage
1 1 0 1
1 2 0 1
1 3 1 2
1 4 0 1
1 5 1 2

Sachant que le champs actif changera au fil du temps donc obliger de rebalayer la table à chaque fois...
0
cyril1982 Messages postés 110 Date d'inscription   Statut Membre Dernière intervention   12
 
Bonjour,

Si tu es obligé de re-parcourir ta table à chaque fois, ma solution est correcte, une seule requête qui charge tout.

Par contre, tu peux l'améliorer en ne chargeant que les lignes qui ont évolué, par exemple en ajoutant une colonne 'updated' qui indiquera s'il y a eut une mise à jour depuis le dernier chargement.
Tu couples ce fonctionnel avec un cache 'fichier' qui contient le dernier état de toutes tes lignes :

$images = array();
//Chargement du cache
if (file_exists(...))
{
 $images = unserialize(file_get_contents(...));
}

//On ne charge que les lignes qui ont évolué
$req="SELECT numligne, numcolonne, urlimage FROM grille2 where updated = 1 ";
$donne= $bdd->query ($req);
while ($data = $donne->fetch())
 {
    $images [$data['numligne'][$data['numcolonne'] = $data;
    print '<img src="'.$url.'" alt="texte alternatif" />';      
 }
$donne->closeCursor();

foreach ($images as $ligne => $imagesByCol)
{
 foreach ($imagesByCol as $colonne => $data)
 {
   print '<img src="'.$data['urlimage'].'" alt="texte alternatif" />';      
  }
}

//Remise à zéro du flag de dernière mise à jour
$req="update grille2 set updated = 0 where updated = 1 ";
$donne= $bdd->query ($req);

//Sauvegarde le cache
file_puts_content(..., serialize($images));


A voir si php aime les tableaux avec 490 000 éléments ...

Mais comment vas-tu afficher 490000 éléments sur une page web, elle va faire combien de Mo oO !???
0