Page 1 sur 1

question boucle / tableau

Posté : 23 oct. 2007, 19:27
par choubix
hello, toujours dans la serie: les tableaux et moi...

je souhaite afficher un champs de la table "display_numbers" en fonction d'une comparaison entre mon tableau $array et le champs id_number.

le probleme: ca ne me retourne qu'un seul bon resultat: le reste est une repetition d'un message d'erreur :(

par ailleurs l'array me retourne 7 valeurs au lieu de 6. (risque de poser probleme dans la requete)
Array ( [0] => 07 [1] => 12 [2] => 19 [3] => 35 [4] => 38 [5] => 47 [6] => )

le code:
$array = strtoArray($draw);
//print_r($array);
//print "<br>";
//
foreach ($array as $key => $value)
{
$query = ("SELECT * FROM display_numbers WHERE id_number = ".$value." ");
$run_query = mysql_query($query) or die ('Invalid query: ' . mysql_error());

$number = mysql_result($run_query,$key,'display_number');

print "$number<br>";

}
qu'est ce qui ne va pas la dedans? c'est l'appel de $key ou de $value qui est faux??

merci

Posté : 23 oct. 2007, 19:34
par Tracker
Salut,

Tu réexécutes ton ordre pour chaque valeur, donc tu ne dois prendre à chaque fois que la première ligne du résultat:
$number = mysql_result($run_query,0,'display_number'); 
[edit]
pense à utiliser mysql_free_result(...), prends pitié de ton serveur :wink:
[edit]
essaie également d'éxecuter le minimum d'ordre quand tu peux. Dans ton cas, tu peux obtenir ton résultat en un seul ordre, avec:
$sql = "SELECT * FROM display_numbers WHERE id_number in ('" . implode("','", $array). "')";
if($result = mysql_query($sql))
{
  while($row = mysql_fetch_assoc($result))
  {
    // ici ton code...
    echo $row['display_number'];
  }
  mysql_free_result($result);
}
else die(mysql_error());

Tracker.

Posté : 23 oct. 2007, 19:49
par choubix
serveur dedieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ;)

non je deconne: avec tout ce que je vais lui mettre comme requete ca ne serait pas du luxe d'optimiser un peu... enfin: il faudrait que je prenne des cours pour ca...

par contre ca me retourne toujours une erreur qui doit venir du fait l'array retourne:
Array ( [0] => 07 [1] => 12 [2] => 19 [3] => 35 [4] => 38 [5] => 47 [6] => )
ou la key 6 est vide...



en attendant de te lire, je vais faireu n tour sur la doc pour voir ce qu'est mysql_free_result (apres tout, le serveur PEUT etre l'ami de l'homme ;) )

Posté : 23 oct. 2007, 19:53
par Tracker
Relis mon post précédent, j'aurais pas dû l'éditer.

[edit]
Evite également les select * quand toutes les infos ne t'intéressent pas, n'oublie pas que plus le volume d'infos à marshaller du serveur au driver est grand et plus ça prend du temps et de la mémoire.


Tracker.

Posté : 23 oct. 2007, 21:37
par choubix
bon ca marche...

j'en ai profiter pour virer une boucle qui me servait a rien en passant :)

merci! :)

Posté : 23 oct. 2007, 21:42
par Tracker
Et si tu pensais simple :wink:
$result = mysql_query(...)
if($row = mysql_fetch_array($result, MYSQL_NUM))
{
  mysql_free_result($result);
  $draw = $row[0];

  //la suite de ton code...
}

Tracker.

Posté : 23 oct. 2007, 22:34
par choubix
j'avais ca ;)
if (mysql_num_rows($run_query) == 1)
{
    $row = mysql_fetch_assoc($run_query);
    $draw = $row['grid_winning'];
    $array = strtoArray($draw);