существует ли более эффективный способ сделать следующее?
$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 />';
}
}
нет другого пути, кроме , используя два запроса для этого, есть ли?
Вы должны иметь возможность повторно использовать запрос следующим образом:
$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 />';
}
}
Вы снова получаете то же самое дважды, верно? Если некоторые данные существуют в соответствии с запросом 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';
}
По сути, это один и тот же запрос: они не?!
Почему вы не можете сделать:
$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
}
просто используйте:
$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";
}