2013-07-19 2 views
-1

Я пытаюсь сравнить температуру XML-файла с моей базой данных. Но это только сравнение первого из 7 данных. Это означает, что цикл while работает только на первом проходе, но почему?while in foreach loop just echo's once

$query = mysql_query("SELECT * FROM table"); //get temperatures from databse 
    foreach ($xml->forecast as $forecast) { //just one pass (one forecast in the xml) 
     foreach ($forecast->time as $time) { // 7 passes (7 dates in the xml) 
      echo $time['day'] . "<br />"; 
      while ($row = mysql_fetch_array($query)) { //This loop just works on the first pass 
       if ($row['mintemp'] <= $time->temperature['day'] && $time->temperature['day'] <= $row['maxtemp']) {       
        echo $row['namekl'] . " | Rating (" . $row['rating'] . ")" . "<br />"; 
       } 
      } 
      echo "<br />"; 
     } 
    } 

я обычно ожидать следующий результат:

2013-07-19 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-20 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-21 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-22 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-23 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-24 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-25 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

, но мои результаты выглядят следующим образом:

2013-07-19 
Databse 1 | Rating (5) 
Databse 2 | Rating (5) 
Databse 3 | Rating (3) 

2013-07-20 

2013-07-21 

2013-07-22 

2013-07-23 

2013-07-24 

2013-07-25 
+0

ну, вы знаете, что он за цикл ... он будет продолжать выполнять и последний получает эхо, когда цикл выходит ... –

+0

Я не получаю его ... цикл работает, но пока работает только один раз ... где проблема? – Nano

+0

try print_r (mysql_fetch_array ($ query)); –

ответ

2

Проблема не в foreach петли, это в том, как вы используя MySQL. mysql_fetch_array возвращает вам все результаты из всей таблицы при первом ее вызове, затем нечего возвращать на каждом проходе через петлю ...

+0

спасибо! Я поместил свой запрос в петли foreach, и теперь он работает! – Nano

+0

@TimRucker, если таблица не меняется во время цикла, вы можете ускорить процесс покупки таблицы один раз, в массив и цикл по массиву несколько раз. Наверное, не имеет большого значения, если таблица небольшая, и запрос прост, но удача по базе данных несколько раз без необходимости может быть медленной ... – Stobor

+0

Я тоже думал об этом. Спасибо: D – Nano