php - Mysql 中的 IF 函数和带有 LEAST() 的 PHP 语句

标签 php mysql

我目前正在尝试获取一个脚本来显示两列之间的最小值。我遇到的问题是某些行在一列中显示 N/A 或 NA,因此它会忽略它。我怎样才能让它显示该行的值,即使它是 NA。

例子

Name     | pCst | cCst
______________________
Player 1 |  352 | 392
Player 2 |  NA  | 400

所以在上面我想为玩家 2 显示 400,为玩家 1 显示 352

"SELECT LEAST(pCst,cCst) 
AS Cost
FROM users";

编辑:

"SELECT name,make,model
                    CASE
                    WHEN pCost IS NULL THEN cCost
                    WHEN cCost IS NULL THEN pCost
                    ELSE LEAST(cCost, pCost)
                    END AS Cost
                    FROM users"
                    ;

使用上面的示例这不起作用。如果我删除名称、制造商、型号,它会起作用,但如果我添加它们,脚本不会执行

最佳答案

这是发明 NULL 的原因之一。将您的值存储为字符串会使事情变得复杂,最终需要进行大量转换:

SELECT CASE 
      WHEN pCst IN ('NA', 'N/A') AND cCst IN ('NA', 'N/A') THEN 0
      WHEN pCst IN ('NA', 'N/A') THEN CAST(cCst AS UNSIGNED) 
      WHEN cCst IN ('NA', 'N/A') THEN CAST(pCst AS UNSIGNED)
      ELSE LEAST(CAST(cCst AS UNSIGNED), CAST(pCst AS UNSIGNED)
   END AS Cost
FROM users
;

如果当两者都是“NA”时你真的想要某种形式的“NA”,那么需要更多(不同的)转换......

SELECT CASE 
      WHEN pCst IN ('NA', 'N/A') AND cCst IN ('NA', 'N/A') THEN 'NA'
      WHEN pCst IN ('NA', 'N/A') THEN cCst
      WHEN cCst IN ('NA', 'N/A') THEN pCst
      ELSE CAST(LEAST(CAST(cCst AS UNSIGNED), CAST(pCst AS UNSIGNED) AS CHAR)
   END AS Cost
FROM users
;

如果您为该字段使用可为空的整数类型,它会更简单:

SELECT CASE 
      WHEN pCst IS NULL THEN cCst
      WHEN cCst IS NULL THEN pCst
      ELSE LEAST(pCst, cCst)
   END AS Cost
FROM users
;

;

关于php - Mysql 中的 IF 函数和带有 LEAST() 的 PHP 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311490/

相关文章:

mysql - 字符串和整数的严格匹配

mysql - 在MySql服务器中恢复postgreSql的.backup文件

php - 正在准备语句,但未执行

带有警告的 PHP/Javascript session 超时

php - 选择最近 30 天的所有订单,并计算每天有多少

mysql - 日期到字符的显式转换

mysql - 删除列的内容

javascript - jQuery在php echo中动画div

php - 连接 MySQL 时遇到问题

mysql - 用两个数据(外键)填充数据库字段