Выберите самую низкую цену из строки базы данных и игнорируйте ноль или 0 - PullRequest
3 голосов
/ 15 февраля 2011

У меня есть база данных, называемая ценами, и существует 12 столбцов, скажем.

comp1, comp2, comp3, comp4, comp5, comp6 и т. Д.

Затем я хочу запуститьзапросить самую низкую цену, хранящуюся в этой строке, которая соответствует идентификатору, однако я думаю, что он рассматривает нулевое значение как самое низкое значение, поскольку я не получаю правильный ответ.

В любом случае?или я делаю это неправильно?

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

}

Ответы [ 4 ]

8 голосов
/ 15 февраля 2011

Если вы вызовете array_filter() в массиве перед вызовом min(), вы удалите все, что имеет значение false, включая null и 0.

Например: $min = min(array_filter($min));

3 голосов
/ 15 февраля 2011

Попробуйте:

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

echo min($min);    
1 голос
/ 15 февраля 2011

Из комментария в http://php.net/manual/en/function.min.php:

Я изменил min-версию без ошибок, чтобы игнорировать значения 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;  
}
?>
0 голосов
/ 15 февраля 2011

Попробуйте это:

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