php + mysql_num_rows

0

существует ли более эффективный способ сделать следующее?

$total_a = mysql_query("SELECT `id` FROM `table` WHERE `this` = 'that'");
$total_b = mysql_num_rows($total_a);

if(!$total_b)
{
    echo 'no results';
}
else
{
    $a = mysql_query("SELECT `id`, `time` FROM `table` WHERE `this` = 'that' ORDER BY `time` DESC");
    while($b = mysql_fetch_assoc($a))
    {
        echo $b['id'].'-'.$b['time'].'<br />';
    }
}

нет другого пути, кроме , используя два запроса для этого, есть ли?

Теги:
performance
mysql-num-rows

4 ответа

1
Лучший ответ

Вы должны иметь возможность повторно использовать запрос следующим образом:

$result = mysql_query("SELECT `id`, `time` FROM `table` WHERE `this` = 'that' ORDER BY `time` DESC");
$num_rows = mysql_num_rows($result);

if(!$num_rows)
{
    echo 'no results';
}
else
{
    while($row = mysql_fetch_assoc($result))
    {
        echo $row['id'].'-'.$row['time'].'<br />';
    }
}
2

Вы снова получаете то же самое дважды, верно? Если некоторые данные существуют в соответствии с запросом 1, снова получите эти данные с запросом 2 и отобразите его. Почему бы просто не использовать второй запрос?

$sql = "SELECT id, time FROM table WHERE this = 'that' ORDER BY time DESC";
$res = mysql_query($sql);
if (mysql_num_rows($res)) {
  while ($b = ...) {
    ...
  }
} else {
  echo 'no results';
}
0

По сути, это один и тот же запрос: они не?!

Почему вы не можете сделать:

$sql = "SELECT `id`, `time` FROM `table` WHERE `this` = 'that' ORDER BY `time` DESC";
$result = mysql_query($sql);

if(mysql_num_rows($result)){
    while($b = mysql_fetch_array($result))
    {
        echo $b['id'].'-'.$b['time'].'<br />';
    }
}
else{
  // no rows
}
-1

просто используйте:

$a = mysql_query("SELECT `id`, `time` FROM `table` WHERE `this` = 'that' ORDER BY `time` DESC");
while($b = mysql_fetch_assoc($a))
{
    echo $b['id'].'-'.$b['time'].'<br />';
}

зачем считать?

вам нужно только подсчитать возможные строки, если вы сделаете что-то вроде

if($count){
echo "starting the stuff";
$a = mysql_query("SELECT `id`, `time` FROM `table` WHERE `this` = 'that' ORDER BY `time` DESC");
while($b = mysql_fetch_assoc($a))
{
    echo $b['id'].'-'.$b['time'].'<br />';
}
echo "ending the stuff";
}
  • 0
    счет необходим только в том случае, если «начинать вещи» и «заканчивать вещи» необходимо показывать только в том случае, если набор результатов не будет пустым
  • 0
    не согласен - я думаю, что OP хочет жизнеспособный способ возврата другого результата, если нет результатов. Считать ряды прекрасно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню