优化拆分mysql_fetch_array会导致HTML部分

时间:2011-11-08 18:18:28

标签: php mysql

我从MySQL数据库中获取动物名称,类型,年龄等数组。我想将这些分成几个部分,如此......

Ages 5 - 10
Dog named Brian
Cat named Kitty
Dog named Buster

Ages 10+
Cat named Moody
Dog named Milo

以下是我现在正在做的事情(查询已按年龄排序):

while ($results = mysql_fetch_array($animals) {

if (($results[age] <= 10 && $results[age] >= 5) && !$head1 && !$head1display) {
    $head1 = 'Ages 5 to 10<br />';
    $head1display++;
} else $head1  = NULL;

if ($results[age] > 10 && !$head2 & !$head2display) {
    $head2 = 'Ages 10+<br />';
    $head2display++;
} else $head2  = NULL;  

echo $head1.$head2.$results[type].' named '.$results[name].'<br />';

}

有更好的方法吗?请记住,我不想有两个查询或两个循环......

3 个答案:

答案 0 :(得分:2)

我建议您在SQL中使用分组/排序来以正确的方式获取动物,例如:

$sql = "select type, name, if(age<5, 'Ages <5', if(age<10, 'Ages 5 - 10', 'Ages 10+)) "heading"
        from animals
        order by age";

然后在你的php中你几乎可以直接输出:

$heading = '';
while ($results = mysql_fetch_array($animals) {
    if($results['heading'] != $heading) {
        $heading = $results['heading'];
        echo '<br/>' . $heading . '<br/>';
    }
    echo $results['type'].' named '.$results['name'].'<br />';
}

答案 1 :(得分:2)

使用此方法可能更容易阅读,但不确定其优化程度。我还假设$ result ['name']代表动物的名字

$younger = array();
$older = array();

while ($results = mysql_fetch_array($animals) {
    if ($results['age'] <= 10 && $results['age'] >= 5) {
        $younger[] = $result['type'].' named '.$result['name'];
    }

    if ($results['age'] > 10) {
        $older[] = $result['type'].' named '.$result['name'];
    }
}

if (count($younger)) {
    echo 'Ages 5 to 10<br />';
    join('<br />', $younger);
}

if (count($older)) {
    echo 'Ages 10+<br />';
    join('<br />', $older);
}

答案 2 :(得分:0)

您的代码中存在一些错误:

$results[type].' named '.$results[type]

我改为:

$results[type].' named '.$results[name]

这仅适用于数据库中有name列的情况 - 相应更改。

$arr1 = array();
$arr2 = array();  
while ($results = mysql_fetch_array($animals)) {

  if ($results['age'] <= 10 && $results['age'] >= 5)
    $arr1[] =  $results['type'].' named '.$results['name'];
  elseif($results['age'] > 10)
    $arr2[] =  $results['type'].' named '.$results['name'];
}

echo (sizeof($arr1)) ? 'Ages 5 to 10<br />'. implode('<br/>', $arr1).'<br/>' : '' . (sizeof($arr2)) ? 'Ages 10+<br />'. implode('<br/>', $arr2).'<br/>' : '';