mysql_num_rows($result)

Fish

Guest
mysql_num_rows($result)

Доброе время суток,
что имеем:
PHP:
if (!($link = mysql_connect($db_host, $db_user, $db_password))){
	displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error()));
	exit();
}
if (!($result=mysql_db_query($database, "select * from forummessage where uintheme='$uintheme' AND uinforum='$uinforum'"))){
	displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error()));
	exit();
}
while (($row=mysql_fetch_array($result))) {
	$allm=((int)mysql_num_rows($result));
}
результат:
строим таблцу(html)..
имеем в таблице поле(строку):
<? if (!isset($allm)) { echo ("0"); } else { echo ($allm); } ?>
в результате:
если записи не найдены и строка в таблице идет первой то все ок, т.е. пишет 0
если записи найдены - он их считает и все снова ок..
а если записи нЕ найдены, но эта строка в конце таблицы(или прсередине где-то) и перед ней идет строка со значением >0, то пишеться предыдущее значение..

задача: что б по-любому писалось верное наличие записей..

вопрос: что не так?
 

RomikChef

Guest
мда...
а зачем ты выводишь одно и то же в цикле?
разве нельзя сначала написать
echo "Найдено записей: ".mysql_num_rows($result);
а потом уже строить таблицу?
 

Demiurg

Guest
И еще, объяснил бы, что требовалось в начале.
И зачем так много скобок ?
 

Fish

Guest
задача:
пишу сколько записей в каждой теме..

как я строю таблицу:
PHP:
<?
while (($row2=mysql_fetch_array($result2))) {
	$themename=($row["themename"]);
	$uinforum=($row["uinforum"]);
	$uintheme=($row["uintheme"]);
//сначала вывожу все темы в этом форуме, а потом уже зная uin конкретной темы ищу есть ли у нее мессяги
	if (!($result=mysql_db_query($database, "select * from forummessagetetris where uintheme='$uintheme' AND uinforum='$uinforum'"))){
		displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error()));
		exit();
	}
	while (($row=mysql_fetch_array($result))) {
		$allm=((int)mysql_num_rows($result));
	}
?>
				<td width=30 align=center<? if (!isset($allm)) { echo ("0"); } else { echo ($allm); } ?>
</td>
<?
}
примерно так..
и все же, в чем проблема, почему считает не так?
 

Fish

Guest
PHP:
<?
// $uinforum передаеться линкой (в URL )
if (!($link = mysql_connect($db_host, $db_user, $db_password))){
	displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error()));
	exit();
}

if (!($result2=mysql_db_query($database, "select * from forumtheme where uinforum='$uinforum' order by uintheme desc"))){
	displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error()));
	exit();
}

?>
<table border=0 cellspacing=0 cellpadding=0 width=470>
<tr>
<td width=470 height=1 colspan=9 background="images/pixfrm01.gif"><img src="images/space.gif" width=1 height=1 valign=top></td>
</tr>
<?
while (($row2=mysql_fetch_array($result2))) {
	$themename=($row["themename"]);
	$uinforum=($row["uinforum"]);
	$uintheme=($row["uintheme"]);

?>

// дальше все было выше..
тема - это я вывожу список тем из таблицы и смотрю сколько в конкретной теме ответов, и есть ли они вобще..

P.S. если необходим конкретно весь_код - могу выложить где-нить у себя.. и линку дать..
 

RomikChef

Guest
Короче. Какая-то у тебя каша в голове, в которой совершенно не хочется разбираться.
mysql_num_rows($result) для одного запроса будет возвращать всегда одно и то же число.
И либо ты делаешь запрос в цикле, или что-то не так пишешь, как есть.

Во-первых, в самую первую очередь, выкини вот этот бред, дикость, уродство:
while (($row=mysql_fetch_array($result))) {
$allm=((int)mysql_num_rows($result));
}
Это делается не в цикле, а ОДИН раз
$allm=mysql_num_rows($result);
мало того, что у тебя крутится холостой цикл, так еще из-за этого у тебя и происходит ошибка, о которой ты писал в самом начале. Если нет записей, то и while ни разу не запускается, соответственно, $allm остается прежним.

Во-вторых, ты специально пишешь так громоздко, чтобы потом было труднее читать?
Вот эту дикость
PHP:
if (!($result=mysql_db_query($database, "select * from forummessage where uintheme='$uintheme' AND uinforum='$uinforum'"))){ 
    displayerrmsg(sprintf("internal error %d:%s\n", mysql_errno(), mysql_error())); 
    exit(); 
}
нормальные люди пишут так:
PHP:
$query="select * from forummessage where uintheme='$uintheme' AND uinforum='$uinforum'";
$result=mysql_query($query) or die(displayerrmsg(mysql_error()));
Какой глубокий смсл несут слова internal error и номер ошибки? Ты их читаешь? Они тебе нужны? или, может, юзеру, который сайт смотрит?

Зачем плодить все эти скобки, лишние строчки? самому же потом будет не понять.

База у тебя все равно одна - зачем ее таскать в каждом запросе?
 

Rynor

stay hungry
уважаемые! у меня вопрос по теме, не по приведенному примеру.
mysql_num_rows($rs) не возвращает 0 даже при пустой выборке, возвращает 1 (а 1 может возвращаться и при непустой выборке 1 строки), поэтому приходится дополнительно проверять самому, чтобы определить, пустой рекордсет или нет.
у меня велосипед едет так:
while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)){
if (empty($row["id"])) {чиста нулевой рекордсет}
}
мона сюда навесить опционно и выход из while
не знаю на скольких это колесах едет, но едет
а как вы решаете данную проблему?
спасибо!
 

Rynor

stay hungry
угу поиск ришаит
http://phpclub.net/talk/showthread.php?s=&threadid=22056&rand=17
 

RomikChef

Guest
У тебя ошибка.
mysql_num_rows() при пустой выборке вернет, конечно же, несомненно, обязательно и бесповоротно ноль.
 

Rynor

stay hungry
Вот блин
я тоже так всегда думал
пока обратное не начал получать....
счас сяду копать глубже
....
да ты прав
но не просто же так я перепутал
где-то че-та было
надо посмотреть с limit 1 в SQL
 

Demiurg

Guest
так пробовал ?
echo mysql_num_rows(mysql_query('select * from table where 0=1'));
 

Rynor

stay hungry
0
ничего не понимаю
понимаю что ноль, но 1 этот я не с потолка взял!
ищу, главное, что должно быть 0 как мне и надо :)

...

нашел
опечатка
#$%#^%$%

...
спасибо за помощь
 

Demiurg

Guest
А откуда ты взял один ? Приведи запрос, который ничего не возвращает, но при этом mysql_num_rows() возвращает 1 ...
 

Rynor

stay hungry
щас-щас
уже час этим занимаюсь :)
может, просто руки прогнулись, день тяжелый не пинайтесь

...
опечатка была :)))
0 1 true false все перемешалось вот и глюкнуло
хорошо-то как
чтоб я без вас зарабатывал?
 

Fish

Guest
RomikChef, спасибо..
все исправил, теперь по-человечески выглядит...
 
Сверху