[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как правильно обработать mysql_fetch_row
Всеслав Чародей
Здравствуйте! Есть такая проблема...
Код
$score1query = mysql_query("SELECT score1 FROM stavlist", $link) or die($db_error);
$score1row = mysql_fetch_row($score1query);
$score2query = mysql_query("SELECT score2 FROM stavlist", $link) or die($db_error);
$score2row = mysql_fetch_row($score2query);
$arrcount1 = count ($score1row);
$arrcount2 = count ($score2row);
print "$arrcount1\n";
print "$arrcount2\n";

Count пишет что в обоих массивах только по одному значению, хотя их там гораздо больше. Почему? Как сделать так, чтобы mysql_fetch_row читал все строки?



Спустя 15 минут, 15 секунд (7.09.2008 - 12:36) phpdog написал(а):
Цитата(Всеслав Чародей @ 7.9.2008, 15:20) [snapback]47912[/snapback]
Здравствуйте! Есть такая проблема...
Код
$score1query = mysql_query("SELECT score1 FROM stavlist", $link) or die($db_error);
$score1row = mysql_fetch_row($score1query);
$score2query = mysql_query("SELECT score2 FROM stavlist", $link) or die($db_error);
$score2row = mysql_fetch_row($score2query);
$arrcount1 = count ($score1row);
$arrcount2 = count ($score2row);
print "$arrcount1\n";
print "$arrcount2\n";

Count пишет что в обоих массивах только по одному значению, хотя их там гораздо больше. Почему? Как сделать так, чтобы mysql_fetch_row читал все строки?

Код
$score1query = mysql_query("SELECT COUNT(DISTINCT score1) FROM stavlist", $link) or die($db_error);
$score1row = mysql_fetch_array($score1query);
$score2query = mysql_query("SELECT COUNT(DISTINCT score2) FROM stavlist", $link) or die($db_error);
$score2row = mysql_fetch_array($score2query);
$arrcount1 = $score1row[0];
$arrcount2 = $score2row[0];
print "$arrcount1\n";
print "$arrcount2\n";

или
Код
$scorequery = mysql_query("SELECT score1, score2 FROM stavlist", $link) or die($db_error);
$scorerow = mysql_fetch_array($scorequery);
$arrcount1 = count($scorerow["score1"]);
$arrcount2 = count($scorerow["score2"]);
print "$arrcount1\n";
print "$arrcount2\n";

Хотя в принципе, т.к. ты берёшь значения из одной таблицы, то кол-во строк будут равны!

Спустя 44 минуты, 58 секунд (7.09.2008 - 13:21) sergeiss написал(а):
Цитата(Всеслав Чародей @ 7.9.2008, 13:20) [snapback]47912[/snapback]
Здравствуйте! Есть такая проблема...
Код
$score1query = mysql_query("SELECT score1 FROM stavlist", $link) or die($db_error);
$score1row = mysql_fetch_row($score1query);
$score2query = mysql_query("SELECT score2 FROM stavlist", $link) or die($db_error);
$score2row = mysql_fetch_row($score2query);
$arrcount1 = count ($score1row);
$arrcount2 = count ($score2row);
print "$arrcount1\n";
print "$arrcount2\n";

Count пишет что в обоих массивах только по одному значению, хотя их там гораздо больше. Почему? Как сделать так, чтобы mysql_fetch_row читал все строки?

Вся "проблема" в том, что mysql_fetch_row на самом деле выдает только одну строку smile.gif Так что всё работает так, как и должно (т.е. согласно тому, что написано в тексте твоего скрипта).
Для получения всех данных надо создать цикл и пройти по всем строкам выборки.
Например, так вот:
---
while( ($score2row = mysql_fetch_row($score2query)) != false)
{
// далее, внутри цикла - всё, что ты хочешь сделать с данными из одной (текущей) строки
....
}
---

Спустя 3 минуты, 20 секунд (7.09.2008 - 13:24) phpdog написал(а):
Цитата(sergeiss @ 7.9.2008, 16:21) [snapback]47932[/snapback]
Цитата(Всеслав Чародей @ 7.9.2008, 13:20) [snapback]47912[/snapback]
Здравствуйте! Есть такая проблема...
Код
$score1query = mysql_query("SELECT score1 FROM stavlist", $link) or die($db_error);
$score1row = mysql_fetch_row($score1query);
$score2query = mysql_query("SELECT score2 FROM stavlist", $link) or die($db_error);
$score2row = mysql_fetch_row($score2query);
$arrcount1 = count ($score1row);
$arrcount2 = count ($score2row);
print "$arrcount1\n";
print "$arrcount2\n";

Count пишет что в обоих массивах только по одному значению, хотя их там гораздо больше. Почему? Как сделать так, чтобы mysql_fetch_row читал все строки?

Вся "проблема" в том, что mysql_fetch_row на самом деле выдает только одну строку smile.gif Так что всё работает так, как и должно (т.е. согласно тому, что написано в тексте твоего скрипта).
Для получения всех данных надо создать цикл и пройти по всем строкам выборки.
Например, так вот:
---
while( ($score2row = mysql_fetch_row($score2query)) != false)
{
// далее, внутри цикла - всё, что ты хочешь сделать с данными из одной (текущей) строки
....
}
---

я же написал, правильный скрипт, нада читать предыдущие посты wink.gif

Спустя 2 минуты, 27 секунд (7.09.2008 - 13:26) Всеслав Чародей написал(а):
2 phpdog: Ваш скрипт к сожалению не помог, в обоих случаях
Код
$arrcount1 = count ($score1row);
выводят 1. Сейчас попробую сделать циклом...

Спустя 2 минуты, 36 секунд (7.09.2008 - 13:29) phpdog написал(а):
Цитата(Всеслав Чародей @ 7.9.2008, 16:26) [snapback]47936[/snapback]
2 phpdog: Ваш скрипт к сожалению не помог, в обоих случаях
Код
$arrcount1 = count ($score1row);
выводят 1. Сейчас попробую сделать циклом...

вообще как я уже сказал, независимо, какой столбец ты берёшь, кол-во строк буит одинаково, поетому мона сделать так:
Код
$scorequery = mysql_query("SELECT COUNT(*) FROM stavlist", $link) or die($db_error);
$scorerow = mysql_fetch_array($scorequery);
$arrcount = $scorerow[0];
print "$arrcount\n";

Спустя 13 минут, 54 секунды (7.09.2008 - 13:43) Всеслав Чародей написал(а):
Немного переделав ваш код вот в это:
Код
$scorequery = mysql_query("SELECT COUNT(score1) FROM stavlist", $link) or die($db_error);
$scorerow = mysql_fetch_array($scorequery);
$arrcount = count($scorerow);
print "$arrcount\n";

получаю на выходе всеравно единицу, а должно быть 4. Цикл тоже не заработал, просто виснет... Нужно загнать в массив весь столбец из бд а потом вывести его, неужели никто с этим не сталкивался???

Спустя 5 минут, 11 секунд (7.09.2008 - 13:48) phpdog написал(а):
Цитата(Всеслав Чародей @ 7.9.2008, 16:43) [snapback]47942[/snapback]
Немного переделав ваш код вот в это:
Код
$scorequery = mysql_query("SELECT COUNT(score1) FROM stavlist", $link) or die($db_error);
$scorerow = mysql_fetch_array($scorequery);
$arrcount = count($scorerow);
print "$arrcount\n";

получаю на выходе всеравно единицу, а должно быть 4. Цикл тоже не заработал, просто виснет... Нужно загнать в массив весь столбец из бд а потом вывести его, неужели никто с этим не сталкивался???

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

Спустя 1 час, 12 минут, 55 секунд (7.09.2008 - 15:01) sergeiss написал(а):
Цитата(Всеслав Чародей @ 7.9.2008, 14:43) [snapback]47942[/snapback]
Цикл тоже не заработал, просто виснет... Нужно загнать в массив весь столбец из бд а потом вывести его, неужели никто с этим не сталкивался???

Ну я с этим "сталкиваюсь" постоянно smile.gif Потому и говорю про цикл. Дай сюда код своего цикла, посмотрим, что ты там сделал.

Цитата(phpdog @ 7.9.2008, 14:24) [snapback]47933[/snapback]
я же написал, правильный скрипт, нада читать предыдущие посты wink.gif

Слющай, генацвале!
Покажи мне, плз, хотя бы один цикл в твоем "правильном" скрипте?!! Человеку же надо данные получить!

В крайнем случае, если надо только количество строк в выборке, то надо использовать mysql_num_rows. А если сами строки нужны, то используется mysql_fetch_array в цикле.


Спустя 3 минуты, 26 секунд (7.09.2008 - 15:04) phpdog написал(а):
ему нада кол-во строк, вот я и написал... COUNT их подсчитывает, а mysql_etch_array, создаёт массив, с 0 елементом, откуда мона и взять ето знаение!, если, же ему нада ещё, чтото узнавать из етих строк, то тогда воть:
Код
$arrcount = 0;
$scorequery = mysql_query("SELECT score1, score2 FROM stavlist", $link) or die($db_error);
while ($scorerow = mysql_fetch_array($scorequery))
$arrcount++;
print "$arrcount\n";

Спустя 9 минут, 19 секунд (7.09.2008 - 15:14) sergeiss написал(а):
Цитата(phpdog @ 7.9.2008, 16:04) [snapback]47955[/snapback]
ему нада кол-во строк, вот я и написал... COUNT их подсчитывает, а mysql_etch_array, создаёт массив, с 0 елементом, откуда мона и взять ето знаение!, если, же ему нада ещё, чтото узнавать из етих строк, то тогда воть:
Код
$arrcount = 0;
$scorequery = mysql_query("SELECT score1, score2 FROM stavlist", $link) or die($db_error);
while ($scorerow = mysql_fetch_array($scorequery))
$arrcount++;
print "$arrcount\n";

Прочитай хэлп хотя бы, прежде чем советы давать smile.gif ОК? А уж собственный опыт так вообще будет прекрасен в этом деле.

mysql_fetch_array создает массив, ты правильно говоришь... Но только в этом массиве содержатся данные ПО ОДНОЙ ЗАПИСИ!!! То есть, это не массив всех строк, а массив значений одной строки из выборки.

Спустя 3 минуты, 16 секунд (7.09.2008 - 15:17) phpdog написал(а):
Цитата(sergeiss @ 7.9.2008, 18:14) [snapback]47956[/snapback]
Цитата(phpdog @ 7.9.2008, 16:04) [snapback]47955[/snapback]
ему нада кол-во строк, вот я и написал... COUNT их подсчитывает, а mysql_etch_array, создаёт массив, с 0 елементом, откуда мона и взять ето знаение!, если, же ему нада ещё, чтото узнавать из етих строк, то тогда воть:
Код
$arrcount = 0;
$scorequery = mysql_query("SELECT score1, score2 FROM stavlist", $link) or die($db_error);
while ($scorerow = mysql_fetch_array($scorequery))
$arrcount++;
print "$arrcount\n";

Прочитай хэлп хотя бы, прежде чем советы давать smile.gif ОК? А уж собственный опыт так вообще будет прекрасен в этом деле.

mysql_fetch_array создает массив, ты правильно говоришь... Но только в этом массиве содержатся данные ПО ОДНОЙ ЗАПИСИ!!! То есть, это не массив всех строк, а массив значений одной строки из выборки.

все мои знания из собственного опыта, и из опыта я всё ему и говарил... почему же, когда я работал над скриптам, всё считалось норм?

Спустя 1 день, 1 час, 11 минут, 11 секунд (8.09.2008 - 16:28) Всеслав Чародей написал(а):
Сделал вот такую загогулину:
Код
$numrows1q = mysql_query("SELECT score1 FROM stavlist", $link) or die ($db_error);
$numrows2q = mysql_query("SELECT score2 FROM stavlist", $link) or die ($db_error);
$numrows1 = mysql_num_rows($numrows1q);
$numrows2 = mysql_num_rows($numrows2q);
if ($numrows1 <> $numrows2) {
    die("Непредвиденная ошибка в структуре бд. Проверьте вашу бд.");
    }
$nr=0;
while ($nr <> $numrows1) {
    $score1row = mysql_fetch_row($numrows1q);
    $score2row = mysql_fetch_row($numrows2q);
    $nr++;
    }
print_r(array_values ($score1row));
print_r(array_values ($score2row));

В итоге создается массив только с одним значением, последним считанным из бд. Пробовал использовать mysql_fetch_array - не помогло. Интересная вещь получается если сделать код
Код
$score1row[$nr] = mysql_fetch_row($numrows1q);
$score2row[$nr] = mysql_fetch_row($numrows2q);

Тогда создается куча переменных и каждая - массив из одной записи))) Как же сделать чтобы это было два массива и print_r написал нормально что-то типа Array
( [0] => x
[1] => y
[2] => z
)
?

Спустя 5 часов, 14 минут, 6 секунд (8.09.2008 - 21:42) sergeiss написал(а):
Ну так и выводи внутри цикла полученные величины, ЁПРСТ!!! И обрабатывай их там же!!!!! Или тебе "религия не позволяет" smile.gif это делать? Или она же не дает думать?

Спустя 21 минута, 42 секунды (8.09.2008 - 22:04) Всеслав Чародей написал(а):
Дело в том что на этом этапе мне надо было получить именно двумерный массив вида Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 2 [4] => 1 [5] => 0 ), НЕ ВЫВОДИТЬ ЕГО ИЛИ ЧТО-ТО ДЕЛАТЬ С НИМ, а именно получить массив. Добится этого просто оказалось, всеголишь дописал current перед mysql_fetch_row)
Код
while ($nr <> $numrows1) {
    $score1row[] = current(mysql_fetch_row($numrows1q));
    $score2row[] = current(mysql_fetch_row($numrows2q));
    $nr++;
    }

Вот то что мне надо было. Всем спасибо за помощь!


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

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