【问题标题】:Select lowest price from database row and ignore null or 0从数据库行中选择最低价格并忽略 null 或 0
【发布时间】:2011-06-27 20:18:27
【问题描述】:

我有一个名为价格的数据库,假设有 12 列。

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);      

}

【问题讨论】:

    标签: php database min


    【解决方案1】:

    试试:

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

    【讨论】:

      【解决方案2】:

      如果您在调用min() 之前在数组上调用array_filter(),您将清除所有评估结果为假的内容,包括null0

      例如:$min = min(array_filter($min));

      【讨论】:

        【解决方案3】:

        试试这个:

        $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;
        }
        

        【讨论】:

          【解决方案4】:

          来自http://php.net/manual/en/function.min.php的评论:

          我已修改无错误的最小版本以忽略 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;  
          }
          ?>
          

          【讨论】:

          • 我不确定是否包含零是 OP 想要的,但我现在需要它,所以 +1。
          猜你喜欢
          • 1970-01-01
          • 2018-03-16
          • 2017-12-10
          • 2014-02-17
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          • 2014-01-05
          • 2013-01-14
          相关资源
          最近更新 更多