Подскажите, почему не выполняется второй массив

trasherz

Новичок
Подскажите, почему не выполняется второй массив

Всем привет.
Имеется такой вот скрипт:
PHP:
echo "It: <table>";
while ($row = mysql_fetch_array($result)) {
<тело цикла>
}
echo "</table>";
Мне необходимо добавить ещё одну таблицу, ниже, с данными из $result.
Делаю вот так:
PHP:
echo "It: <table>";
while ($row = mysql_fetch_array($result)) {
<тело цикла>
}
echo "</table>";

echo "Ita: <table>";
while ($row = mysql_fetch_array($result)) {
<тело цикла2>
}
echo "</table>";
Ничего не меняется. Выполняется лишь первый цикл..

Подскажите, пожалуйста, в чем дело.
 

que_bunt

Новичок
попробуй вставить перед вторым цыклом
PHP:
mysql_data_seek($result,0)
или
PHP:
mysql_data_seek($result,1)
точно не знаю.
должно помочь.
 

AmadMike

Новичок
Хм функция mysql_fetch_assoc передвигает внутренний указатель $result поэтому после прохождения первого цикла он сдвинется на конец данных. Надо либо скопировать $result в другую переменную, либо сначала прогнать все через цикл и создать массив с переменными, которые потом уже прогонять 2 раза (либо сразу в первом цикле и запоминать в массив и формировать таблицу). Можно еще 2 раза запросить sql сервер, но это будет хуже.
 

WP

^_^
Edson
Может сейчас как раз тот случай когда лучше пожувать чем поговорить? :)
trasherz
Дело в том, что mysql_fetch_fetch_assoc() увеличивает offset по рядам. И по окончанию цикла, их уже как-бы нет. Запиши сначала в массив, а потом по нему пройди два раза.
PHP:
$rows = array();
while ($rows[] = mysql_fetch_array($result));;
foreach ($rows as $row)
{
 <тело цикла>
}
foreach ($rows as $row)
{
 <тело цикла>
}
 

AmadMike

Новичок
PHP:
$array = array();
while ($row = mysql_fetch_array($result)) $array[] = $row;
$countarr = sizeof($array);

echo "It: <table>";
for ($i = 0; $i < $countarr; $i++) {
<тело цикла>
}
echo "</table>";

echo "Ita: <table>";
for ($i = 0; $i < $countarr; $i++) {
<тело цикла2>
}
echo "</table>";
 

WP

^_^
Опередили... но
AmadMike
> Можно еще 2 раза запросить sql сервер, но это будет хуже.
Нельзя. Точнее можно, но это всё равно что каждый раз звонить по телефону в Австралию и переспрашивать данные запроса у туземца.

-~{}~ 08.05.06 22:42:

AmadMike
Ну а чем тебе мой пример не понравился? :)
 

trasherz

Новичок
Сделал так, как предложил WP.
Все работает.

И по окончанию цикла, их уже как-бы нет.
Именно так я и думал :)

Всем спасибо за внимание.


P.S. Все-таки приятно, что есть такой ресурс, на котором могут подсказать и помочь в течение десяти минут. респект
 

AmadMike

Новичок
А вот mysql_data_seek по ходу будет иметь такой же эффект как запрашивать 2 раза данные у сервера базы. Лучше всего запоминать в массив.
 

AmadMike

Новичок
Не уверен, может и не так. Но на сайте php такого применения этой функции нет. там написано:
mysql_data_seek() перемещает внутренний указатель в результате запроса к ряду с указанным номером. Следующий вызов mysql_fetch_row() вернёт именно его.
 

que_bunt

Новичок
AmadMike а если указать ряд номер 0 для mysql_data_seek то это и будет лучшим вариантом.
 

SelenIT

IT-лунатик :)
AmadMike
На будущее: если не уверен - не берись утверждать.
...на сайте php такого применения этой функции нет...
А по логике, какое может быть применение у того, что ты процитировал?
 
Сверху