2011-02-15 34 views
3

我有一个数据库,称为价格,有12列让说。选择从数据库行最低的价格,忽略空或0

COMP1,COMP2,COMP3,COMP4,COMP5,COMP6等。

我再要运行一个查询,以找到存储该行相匹配的ID在最低的价格,但我认为这是治疗null作为最低值,因为我没有得到正确的答案。

反正这个呢?还是我做错了?

$query = "SELECT * FROM Prices WHERE id =$id" or die(mysql_error()); 
    $result = mysql_query($query) or die(mysql_error()); 
    while ($row = mysql_fetch_array($result)) { 

    $comp1= $row['comp1']; 
    $comp2= $row['comp2']; 
    $comp3= $row['comp3']; 
    $comp4= $row['comp4']; 
    $comp5= $row['comp5']; 
    $comp6= $row['comp6']; 
    $comp7= $row['comp7']; 
    $comp8= $row['comp8']; 
    $comp9= $row['comp9']; 
    $comp10= $row['comp10']; 
    $comp11= $row['comp11']; 
    $comp12= $row['comp12']; 

$min = array($comp1, $comp2, $comp3, $comp4, $comp5, $comp6, $comp7, $comp8, $comp8, $comp10, $comp11, $comp12); 

echo min($min);  

} 

回答

8

如果在调用min()之前调用阵列上array_filter(),您将清除任何计算结果为false,包括null0

例如:在http://php.net/manual/en/function.min.php

$query = "SELECT * FROM Prices WHERE id =$id" or die(mysql_error()); 
$result = mysql_query($query) or die(mysql_error()); 
while ($row = mysql_fetch_array($result)) { 
    $i= 0; 
    foreach ($row as $val) { 
     if ($i == 0) { 
      $tmpMin = $val; 
     } else { 
      if ($tmpMin < $val) { 
       $val = $tmpMin;  
      } 
     } 
    } 

    unset($tmpMin); 
    echo $tmpMin; 
} 
+0

这竟然是正确的,感谢 – AJFMEDIA 2011-02-18 10:56:48

+0

这是天才..谢谢 – scampbell 2012-10-19 14:39:45

3

尝试:

$min = array($comp1, $comp2, $comp3, $comp4, $comp5, $comp6, $comp7, $comp8, $comp8, $comp10, $comp11, $comp12); 
$min = array_filter($min); 

echo min($min);  
+0

这个伟大的工作谢谢 – AJFMEDIA 2011-02-15 19:12:07

0

试试这个

我已经修改了bugfree分钟版本忽略NULL值(否则返回0 )。

<?php 
function min_mod() { 
    $args = func_get_args(); 

    if (!count($args[0])) return false; 
    else { 
    $min = false; 
    foreach ($args[0] AS $value) { 
     if (is_numeric($value)) { 
     $curval = floatval($value); 
     if ($curval < $min || $min === false) $min = $curval; 
     } 
    } 
    } 

    return $min; 
} 
?> 
1

从评论:$min = min(array_filter($min));