Поиск максимального значения.

Ridge

Новичок
Поиск максимального значения.

У меня возникла ситуация:
Существует таблица reg с полями 1) user_id 2) nick 3) pass и т.д.
Нужно вывести список юзверей. но при этом невозможно воспользоваться mysql_num_rows и выводить по циклу через user_id т.к. user_id может быть с перерывами ( не 1,2,3,4,5 а 1,4,5,6). Т.е. мне просто нужно взять максимальный user_id и выводить в таком количестве итераций. Вот код с запросом:

$query="SELECT MAX(user_id) FROM reg";
$res=mysqli_query($connect, $query );
$arr2=mysqli_fetch_array($res);
$num=$arr2;
$num - макс кол-во итераций. цикл идет с нуля до $num соответственно.
При выводе результата (таблицы с юзерами) выдается вначале:
Fatal error: Maximum execution time of 30 seconds exceeded in....
но после выдается результат. и главное тот что я ожидаю. Но с задержкой в 30 секунд.
Подскажите пожалуйста, в чем проблема.
 

Pigmeich

Новичок
Посмтри в конец скрипта.

Между последним echo и концом находиться некая конструкция влезающая в очень длинный (или бесконечный цикл).

/me *спрятал хрустальный шар*
 

Андрейка

Senior pomidor developer
ой, а покажи свой код вывода юзеров в случае, если б "user_id был без перерывов, т.е. (1,2,3,4,5...)"
 

Ridge

Новичок
В случае если user_id идет подряд (Эту часть кода я заменил):
$query="SELECT * FROM reg ";
$res=mysqli_query($connect, $query );
$num=mysqli_num_rows($res);

Это то что я имею для вывода
for ($i=1; $i<=$num; $i++)
{
$arr1[$i]=$i;
$query="SELECT * FROM reg where user_id='$i'";
$res=mysqli_query($connect, $query );
if (mysqli_num_rows($res)>0)
{

$arr=mysqli_fetch_array($res);
if ($arr['sess_id']==1) $prior='Пользов.';
if ($arr['sess_id']==2) $prior='Модер.';
if ($arr['sess_id']==3) $prior='Админ.';
echo '<tr height=30>
<td width=30 nowrap><div id=con7>'.$arr['user_id'] .'</div></td>
<td width=70 height=25 nowrap><div id=con7>'.$arr['nick'].'</div></td>
<td height=20 width=60 nowrap><div id=con7>'.$arr['pass'].'</div></td>
<td height=20 width=60 nowrap><div id=con7>'.$arr['email'].'</div></td>
<td height=20 width=30 nowrap ><div id=con7>'.$prior.'</div></td>
</tr>';

}

}
При том, моя проблема возникла только тогда! когда я поменял query с "SELECT * FROM reg " на "SELECT MAX(user_id) FROM reg" и $num присвоил результат mysql_query.... все. до этого превышения лимита времени не было
 

Фанат

oncle terrible
Команда форума
жостко.

-~{}~ 27.01.08 11:26:

Ridge
Давай разбираться.
Судя по всему, ты уже выучил, как получить из БД одну строку. А как получить несколько - не знаешь?
Так вот. Открою тебе страшную тайну.
Если запрос возвращает несколько строк, то их все пожно получить в скрипте. просто вызывая mysqli_fetch_array столько раз, сколько строк вернул запрос.

А теперь - вопрос! Что возвращает запрос SELECT * FROM reg?
 

Ridge

Новичок
Вернет все. Хорошо но как мне это все тогда получить? Что будет если я выполню mysqli_fetch_array?
 

Фанат

oncle terrible
Команда форума
попробуй - узнаешь =)
заодно попробуй почитать документацию на эту функцию.

-~{}~ 27.01.08 13:45:

Вообще странный вопрос. После того, что я написал выше...
 

Ridge

Новичок
да я знаю, будет больше, но все же у меня вывод идет по user_id, и если user_id не существует то таблица для него просто не будет выводиться
 

Ridge

Новичок
Не-а) ВОт что я делаю:
$query="SELECT * FROM reg";
$res=mysqli_query($connect, $query );
$arr2=mysqli_fetch_array($res);
$num=$arr2[user_id];
И выводится ровно ноль)

-~{}~ 27.01.08 14:40:

Все господа, получилось. Сделал так:
$res=mysqli_query($connect, $query );
$num=mysqli_num_rows($res);
for ($i=1; $i<=$num; $i++)
{
$arr2=mysqli_fetch_array($res);
}
$num=$arr2['user_id'];

Спасибо всем кто помагал, простите что так тупил)
 

Ridge

Новичок
хм...покажи пожалуйста где он "мегабредовый" и "потенциально нерабочий"
 

Фанат

oncle terrible
Команда форума
Скорее, я бы сказал - анекдотичный.
Один-в-один как в истории про двух чукчей и геолога.
 

Ridge

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

Beavis

Banned
Ridge
ну ты в цикле сто раз присвоил переменной новое значение) и что от этого изменилось?
это всё равно что написать $a=1; $a=2; ...; $a=100...
нормальный код?
 

Фанат

oncle terrible
Команда форума
Видишь ли.
Когда я тебе говорил про запрос SELECT * FROM reg, я имел в виду, что ты, выполнив его, сразу и будешь получать нужные тебе данные.
Мне и в голову не могло придти, что ты используешь его для того, чтобы получить этот ненужный максимальный ид, да ещё и таким чудовищным способом.

Вместо того, чтобы получать ВСЮ НУЖНУЮ ТЕБЕ СТРОКУ, и СРАЗУ ЕЁ ИСПОЛЬЗОВАТЬ, ты тупо прокручиваешь результат запроса в поисках последнего айдишинка. У меня даже никаких слов нету...

-~{}~ 27.01.08 15:17:

Beavis
ну так он получил искомое. ему нужно было получить максимальный айди. Он с эим вопросом, собственно, на форум и пришел - не работает получение максимального айдишника
 

Beavis

Banned
то что ты записал - эквивалентно
PHP:
while($arr2 = mysqli_fetch_array($res)) {
//а тут ничего и нет)) 
}
-~{}~ 27.01.08 15:19:

а, блин, мне и в голову не могло придти что он id вычисляет так...
 

Фанат

oncle terrible
Команда форума
Самое обидное, что в доке нету примера с while
в mysql* есть, а в mysqli - нету.
 

Ridge

Новичок
Тоесть ты хочешь сказать, что я могу обойтись таким кодом:
$query="SELECT * FROM reg";
$res=mysqli_query($connect, $query );
$arr2=mysqli_fetch_array($res);\
$num=$arr2['user_id'];
так?
 
Сверху