2011-09-24 3 views
0

J'ai un problème de requêtes lentes, peut-être je me trompe, voici ce que je veux,moyen le plus rapide pour afficher les enregistrements mysql db

je dois afficher plus de 40 listes déroulantes à une seule page avec les mêmes champs, par les cheveux db, mais je pense que la requête prend beaucoup de temps pour exécuter et aussi utiliser plus de ressources ..

est un exemple ici ...

$sql_query = "SELECT * FROM tbl_name"; 
$rows = mysql_query($sql_query); 

maintenant j'utiliser en boucle pour imprimer tous les enregistrements cette requête dans la liste déroulante,

mais je dois reproduire même enregistrement dans la liste déroulant suivant jusqu'à 40 listes, donc j'utiliser

mysql_data_seek() pour passer au premier enregistrement, puis réimprimer la liste suivante et ainsi de suite jusqu'à 40 listes.

mais ce fut semble lent à moi donc j'utiliser la deuxième méthode comme cette même requête pour les 40 listes

$sql_query2 = "SELECT * FROM tbl_name"; 
$rows2 = mysql_query($sql_query2); 

pensez-vous que je trompé sur la vitesse de requête, ou me proposez-vous la Une autre méthode est plus rapide que ces méthodes ...

+0

Merci à vous tous ...... –

Répondre

-2

Au lieu d'imprimer les enregistrements, de les retourner et de les imprimer à nouveau, placez les enregistrements dans une grande variable chaîne, puis faites-en l'écho pour chaque liste déroulante.

$str = ""; 
while($row = mysql_fetch_assoc($rows)) { 
    // instead of echo... 
    $str .= [...]; 
} 
// now for each dropdown 
echo $str; 
// will print all the rows. 
3

Essayez de mettre les lignes dans un tableau comme ceci:

<?php 
$rows = array(); 

$fetch_rows = mysql_query("SELECT * FROM table"); 
while ($row = mysql_fetch_assoc($fetch_rows)) { 
    $rows[] = $row; 
} 

Ensuite, il suffit d'utiliser le tableau $rows dans une boucle foreach ($rows as $row).

0

Un surdébit de traitement considérable est associé à l'extraction de lignes à partir d'une ressource de résultat MySQL. En général, il serait plus rapide de stocker les résultats sous forme de tableau en PHP plutôt que d'interroger et récupérer le même ensemble de lignes à partir du SGBDR.

$rowset = array(); 
$result = mysql_query(...); 
if ($result) { 
    while ($row = mysql_fetch_assoc($result)) { 
    // Append each fetched row onto $rowset 
    $rowset[] = $row; 
    } 
} 

Si votre requête renvoie beaucoup de lignes (en milliers ou des dizaines de milliers ou des millions) et vous devez utiliser tous, vous pouvez atteindre les limites de mémoire en stockant toutes les lignes dans un tableau en PHP. Dans ce cas, il peut être plus conservateur de mémoire d'extraire des lignes individuellement à partir de MySQL, mais il sera probablement plus gourmand en ressources processeur.

Questions connexes