功能LEAST()无法正常工作

时间:2013-05-31 20:01:44

标签: php mysql

我有SQL LEAST功能的问题。此代码应采用表NAVIGATION中名为ORDER的列中的最小数字(仅有数字)。之后 - 比较,如果数字是(非)平均为零。如果不是那么代码应该将表列ORDER中的第一条记录设置为0.它只是以某种方式总是将最小数字返回为0,即使列顺序中没有0也是如此。所以条件总是如此。

 $sql="SELECT LEAST(999,order) FROM navigation";
        $lowest_num = mysql_query($sql) or die (mysql_error());
        if ($lowest_num != 0) {$sql2 = "UPDATE navigation SET order= '0' LIMIT 1";
            mysql_query($sql2) or die (mysql_error());
        }

4 个答案:

答案 0 :(得分:2)

您需要的是MIN()功能:https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_min

"SELECT MIN(`order`) FROM navigation"

这将返回order表中navigation列的最小值。

LEAST()仅返回其参数中的最小值,而不是聚合函数。

答案 1 :(得分:1)

该查询将返回999中的至少一个并订购每个行。您需要使用"SELECT MIN(order) FROM navigation"。如果你仍然需要做至少999和最小值,你可以这样做:

$lowest_num = min(mysql_query($sql), 999) or die (mysql_error());

答案 2 :(得分:1)

试试这个

  $sql="SELECT MIN(`order`) as lowest FROM navigation";

AND 更改此

if ($lowest_num != 0)

 if ( mysql_num_rows($lowest_num) != 0 )

AND 更改此

 UPDATE navigation SET order

UPDATE navigation SET `order`

编辑:

试试这个

 $sql="SELECT MIN(`order`) as lowest FROM navigation";
    $lowest_num = mysql_query($sql) or die (mysql_error());
    $row = mysql_fetch_array($lowest_num) or die (mysql_error());
    if ( mysql_num_rows($lowest_num) != 0 and $row['lowest'] != 0) {$sql2 = "UPDATE navigation SET `order`= '0' LIMIT 1";
        mysql_query($sql2) or die (mysql_error());
    }

答案 3 :(得分:0)

您可以通过以下方式一步完成这些:

UPDATE navigation
    SET order = 0
    where not exists (select * from (select 1 from navigation having min(`order`) = 0))
    LIMIT 1

或者,如果order永远不会消极:

UPDATE navigation
    SET order = 0
    where not exists (select * from (select 1 from navigation where `order` = 0))
    LIMIT 1

(正如所写的,这不一定更有效;它意味着捕获逻辑。为了提高效率,你可以用join来编写它。)

您需要使用join表单:

update navigation cross join
      (select min(`order`) as minorder from navigation) const
    set navigation.`order` = 0
    where const.minorder = 0
    limit 1;