[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php mysql взять данные из массива не нарушив его
DooMka
Тут у нас уже утро, столкнулся с такой проблемой, что в коде после запроса к базе идёт вывод одной записи из массива, а в дальнейшем идёт полный вывод массива, но к сожалению меньше на 1. Думаю с этим зачастую сталкиваются новички.

$resulttabl = mysql_query("SELECT * FROM tabl WHERE id='$nomid'",$db);

// выдёргиваем одну запись из массива - как результат теряем первую строку
$myrowtabl = mysql_fetch_assoc($resulttabl);
$vivods1 = $myrowtabl['zapis_1']

while ($myrowtabl = mysql_fetch_assoc($resulttabl))
{
// вывод массива, но первая строка пропадает из-за обращения сделанного выше
}


к сожалению ответа найти не смог, только познаю принципы работы php на своих ошибках...



Спустя 14 минут, 28 секунд (22.01.2012 - 05:52) TranceIT написал(а):
$myrowtabl['zapis_1']

Вот он! Этот коварный тип грожданской наружности! Используйте как первый.

Или вначале пройдитесь по всему массиву, а затем обращайтесь к первому элементу.

А вообще есть такая замечательная ф-ция mysql_data_seek()

Спустя 49 секунд (22.01.2012 - 05:53) inpost написал(а):
$myrowtabl = mysql_fetch_assoc($resulttabl);
- выбрал первую запись.
while ($myrowtabl = mysql_fetch_assoc($resulttabl))
- внутри цикла идёт выбор следующей записи. При условии, если записи не были выбраны, но будет выбрана первая, если записи закончились - цикл останавливается.

Спустя 1 минута, 7 секунд (22.01.2012 - 05:54) inpost написал(а):
while()
{
if(!isset($var))
$var = 'text';
}

Итого, переменная будет создана лишь один раз!

Спустя 50 минут, 55 секунд (22.01.2012 - 06:45) DooMka написал(а):

$resulttabl = mysql_query("SELECT * FROM tabl WHERE id='$nomid'",$db);

// выдёргиваем одну запись из массива, самую первую
$myrowtabl = mysql_fetch_assoc($resulttabl);
$vivods1 = $myrowtabl['zapis_1']

do{
// выводится и первая строка массива
}while($myrowtabl = mysql_fetch_assoc($resulttabl));


приведённый выше вариант выводит и первую строку массива, которая уже была в обработке...

пытался использовать функцию

mysql_data_seek


наглядного примера найти не сумел так-что кроме ошибок ничего дельного вывести не удалось...

while()
{
if(!isset($var))
$var = 'text';
}


извиняюсь за недалёкость, но как использовать этот код для вывода и первой строки массива увы не понял
_____________________________
inpost кажется догадался, о чём идёт речь, то-есть как-бы используем этот вариант для выдёргивания именно одной строки, а уже в дальнейшем выводим весь массив с первой строкой соответственно

Спустя 33 минуты, 44 секунды (22.01.2012 - 07:19) inpost написал(а):
DooMka
do-while - это неправильно в твоём примере.
Используй так, как я показал. А для этого надо не быть далёким или не далёким, а надо тестировать и пробовать такой и такой код smile.gif

Спустя 2 часа, 56 минут, 19 секунд (22.01.2012 - 10:15) sergeiss написал(а):
По сути дела сказали уже. А я при виде кода первая же мысль "Попов детектед" smile.gif

Спустя 5 минут, 23 секунды (22.01.2012 - 10:21) inpost написал(а):
sergeiss
Зато какая ностальгия! Сейчас это огромная редкость встретить код Попова smile.gif

Спустя 13 минут, 32 секунды (22.01.2012 - 10:34) sergeiss написал(а):
Цитата (inpost @ 22.01.2012 - 11:21)
Сейчас это огромная редкость встретить код Попова

Не знаю, не знаю... И тут периодически встречается, и на англоязычном форуме очень подобное видел smile.gif Там только нету второго признака поповского кода, которые есть тут. Это - название переменное $myrow wink.gif

Спустя 1 час, 41 минута, 23 секунды (22.01.2012 - 12:15) asokol написал(а):
$result = mysql_query("SELECT [заменить на список нужных полей] FROM `tabl` WHERE `id`={$nomid};", $db);
$vivods1 = NULL;
while($row = mysql_fetch_assoc($result)) {
if (!isset($vivods1)) {
$vivods1 = $row['zapis_1'];
// необходимые действия с первой записью
}
// вывод массива, первая строка не пропадает, так как нет лишнего обращения
}

Спустя 7 часов, 21 минута, 33 секунды (22.01.2012 - 19:37) DooMka написал(а):
Всем огромное спасибо, погуглив и почитав кое-какие статьи сумел-таки понять принцип работы, в чём заключалась моя ошибка и вот её устранение, и именно как-бы так выразится "обнуление счётчика" с помощью mysql_data_seek

mysql_data_seek($resulttabl, 0);

while ($myrowtabl = mysql_fetch_assoc($resulttabl))
{
// вывод массива, но первая строка пропадает из-за обращения сделанного выше
}


число "0" указывает с какой строки начинать вывод массива. Всем огромное спасибо.

Спустя 42 минуты, 32 секунды (22.01.2012 - 20:20) sergeiss написал(а):
Цитата (DooMka @ 22.01.2012 - 20:37)
в чём заключалась моя ошибка....

На самом деле твоя ошибка заключалась в другом, и тебе её указали. Тебе просто не надо было вызывать mysql_fetch_assoc до того, как ты вошел в цикл. Тогда и вызов "обнуления счетчика" тебе не понадобится (странное название, однако smile.gif).

Я практически уверен, что ты так и оставил mysql_fetch_assoc, затем добавил mysql_data_seek, а затем уже у тебя идет цикл чтения данных...

Спустя 13 минут, 52 секунды (22.01.2012 - 20:33) DooMka написал(а):
Да, я так и оставил, но догадался я об этом с самого начала, проблема была в невозможности обойти мной данной конструкции, страница должна была вывести автора добавления данных в базу в самом её верху, а уже ниже выводились все опубликованные им материалы в перечислении... Выловить автора либо из get либо каким-либо другим способом не было возможным. Но уже сейчас понимаю, каким путём нужно реализовывать конструкцию страницы с более информативным выводом wink.gif

Спустя 3 минуты, 44 секунды (22.01.2012 - 20:37) Winston написал(а):

Спустя 5 минут, 24 секунды (22.01.2012 - 20:43) sergeiss написал(а):
Цитата (DooMka @ 22.01.2012 - 21:33)
но догадался я об этом с самого начала, проблема была в невозможности обойти мной данной конструкции

Элементарно обходится данная "проблема"!!! Смотри сюда:

...=mysql_query(.....);
// на данном этапе сделан запрос, но выборка данных не делалась
$first_line=true;
while( $row=mysql_fetch_assoc(.... ) )
{
if( $first_line )
{
$first_line=false;
// тут выполняется некий код, работающий с данными в первой строке
// например, выводится заголовок таблицы

....
}
// а далее выполняется код для всех строк
...
}


Так что не надо насчет "не обходится". Думать надо :) и любая проблема может быть решена. Часто - достаточно простыми средствами.



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.