php - 如果右连接不返回任何行,则 mysql 设置为 null 或 0

标签 php mysql yii sql-update right-join

我有以下查询未返回任何行。但是,如果发生这种情况,我想将值设置为 0 或 null。我该怎么做?

UPDATE `hdb`.`projects` 
RIGHT JOIN (
  SELECT jobs.PROJID, round(SUM(jobs.value),2) AS SumOfJobValues, round(Sum(jobs.Earned),2) AS SumOfEarnedValues 
  FROM jobs
  WHERE projects.PROJID = 1312184
  GROUP BY jobs.PROJID
) as temp ON projects.PROJID = temp.PROJID
SET 
  projects.VALUE = round(SumOfJobValues,2), 
  projects.WIP = round(SumOfEarnedValues,2)

我重写了使用左连接的查询,它在 mysql 中有效。但是,当我使用 php Yii 框架运行它时,我无法正常工作。

UPDATE `hdb`.`projects` 
left JOIN (
  SELECT 
    jobs.PROJID, 
    round(SUM(jobs.value),2) AS SumOfJobValues,
    round(Sum(jobs.Earned),2) AS SumOfEarnedValues 
  FROM jobs         
  GROUP BY jobs.PROJID
) as temp ON projects.PROJID = temp.PROJID
SET 
  projects.VALUE = round(SumOfJobValues,2), 
  projects.WIP = round(SumOfEarnedValues,2)
WHERE projects.PROJID = 1312184

在 php Yii 上运行相同的查询

$sql = "UPDATE `hdb`.`projects` 
   LEFT JOIN (
     SELECT 
       jobs.PROJID, round(SUM(jobs.value),2) AS SumOfJobValues,
       round(Sum(jobs.Earned),2) AS SumOfEarnedValues 
     FROM jobs  
     WHERE jobs.PROJID = :pid                                       
     GROUP BY jobs.PROJID
     as temp ON projects.PROJID = temp.PROJID                               
     SET
       projects.VALUE = round(SumOfJobValues,2), 
       projects.WIP = round(SumOfEarnedValues,2)
     WHERE projects.PROJID = :pid";

$command=$connection->createCommand($sql);
$command->bindValue(":pid",$model->PROJID,PDO::PARAM_INT);
$command->execute();

最佳答案

您忘记在 Yii 查询的第 10 行之前关闭括号。此外,如果您不想加入 NULL 值,您可以在 JOIN 定义中使用“IS NOT NULL”,例如:

UPDATE `hdb`.`projects` 
left JOIN (
  SELECT 
    jobs.PROJID, 
    round(SUM(jobs.value),2) AS SumOfJobValues,
    round(Sum(jobs.Earned),2) AS SumOfEarnedValues 
  FROM jobs         
  GROUP BY jobs.PROJID
) as temp ON (projects.PROJID = temp.PROJID) AND (temp.PROJID IS NOT NULL)
SET 
  projects.VALUE = round(SumOfJobValues,2), 
  projects.WIP = round(SumOfEarnedValues,2)
WHERE projects.PROJID = 1312184

编辑:不过我还没有测试过。

关于php - 如果右连接不返回任何行,则 mysql 设置为 null 或 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663990/

相关文章:

activerecord - Yii - 如何使用 where 和 limit 等条件

yii - findByAttributes 示例

php - 将图像存储在mysql数据库中

php - 如何通过连接两个表而不重叠具有相同关系 ID 的记录来创建 TableView

MySQL : Backup Database with selected table

mysql - SQL 交集和并集

PHP cURL POST 请求无法发送?

php - 我尝试使用 session 数据调用数组上的成员函数 save()

mysql 1064 error 你的SQL语法有错误;

yii - 在网站/错误中引发404错误时,Yii重定向到自定义错误页面URL