Два оператора mysql_fetch_array в - PullRequest
3 голосов
/ 27 апреля 2011

Есть ли причина, по которой я не смог включить два оператора mysql_fetch_array, работающие с двумя разными результатами запроса mysql, в один цикл while?

Причина в том, что у меня есть два результата запроса из базы данных mysql, каждый из которых содержит два столбца следующим образом:

Query 1: Date,     Value 1                 
Query 2: Date,     Value 2

Даты в каждом запросе всегда являются датами окончания недели с регулярными интервалами в 1 неделю в порядке возрастания. Однако они могут начинаться и заканчиваться в разные даты для любого результата запроса.

Я хочу создать массивы для возврата к вызывающей веб-странице с датой, значением 1 и значением 2, только если оба значения 1 и 2 доступны в течение одного периода.

Я включил блок if / else, который сравнивает первую дату в каждом запросе и устанавливает указатель, используя mysql_data_seek, для которого когда-либо в наборе результатов есть самая ранняя дата начала, чтобы обеспечить его переход к дате, соответствующей первой доступной дате в другой набор записей.

Поскольку последняя доступная дата также может отличаться, я подумал, что для обеспечения того, чтобы возвращаемые массивы имели одинаковую длину (следовательно, усечение того результата, который имеет более свежие данные, до последней доступной даты другого результата), Я думал, что смогу выполнить итерацию результатов обоих запросов следующим образом:

$ReturnDate = array();
$ReturnValue1 = array();
$ReturnValue2 = array();

$i=0;
while ($row1=mysql_fetch_array($res_Query1,MYSQL_NUM) && $row2=mysql_fetch_array($res_Query2,MYSQL_NUM)) { 
        $ReturnDate[$i]= $row1[0];
        $ReturnValue1[$i] = (float)$row1[1];
        $ReturnValue2[$i] = (float)$row2[1];
        $i++;
}

Однако второй массив возвращаемых значений всегда возвращает последовательность нулей. Действителен ли приведенный выше код?

Большое спасибо

1 Ответ

3 голосов
/ 27 апреля 2011

Измените && на and. Нет, я не шучу.

&& имеет более высокую степень приоритетности, чем = (но and нет), поэтому

$a = foo() && $b = bar() будет действительно $a = (foo() && ($b = bar()))

...