php - WHEN 子句中具有多个条件的 MySQL CASE

标签 php mysql

我的数据库中有轨道和专辑。每首轨道都可以属于一张专辑。用户可以更新属于专辑的轨道。

PHP 接收一组轨道 ID 和一个专辑 ID。我正在尝试创建 1 个查询,该查询将更新轨道的专辑 ID,同时如果轨道的专辑 ID 不再属于专辑,则将其设为 NULL。

$query = "UPDATE tracks
          SET album_id =
            CASE
              WHEN album_id = :album_id AND NOT FIND_IN_SET(tempkey, :tracks) THEN NULL
              WHEN FIND_IN_SET(tempkey, :tracks) THEN :album_id
            END
          WHERE account_id = :account_id";

$statement = $pdo_conn->prepare($query);
$statement->execute($data);

album_id = :album_id 部分似乎不起作用。每次我更新任何给定轨道的专辑 ID 时,它都会将所有其他轨道的专辑 ID 设为 NULL。

如何修复此查询以实现我想要的效果(如果与仅使用 2 个查询相比仍然值得)?

Ps:使用FIND_IN_SET,就像NOT IN/IN,但没有使用 PDO 时带来的麻烦/肮脏。

最佳答案

您需要ELSE条件。否则,默认情况下您会得到ELSE NULL

CASE
  WHEN album_id = :album_id AND NOT FIND_IN_SET(tempkey, :tracks) THEN NULL
  WHEN FIND_IN_SET(tempkey, :tracks) THEN :album_id
  ELSE album_id
END

关于php - WHEN 子句中具有多个条件的 MySQL CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676786/

相关文章:

php - SELECT 语句位于另一个 SELECT 语句中

cpanel - mysqldump后的sql文件在哪里可以找到

c# - 我可以使用SQlite访问MySQL数据库吗

java - 在 Spring Boot 的 application.properties 中使用 env 变量

php - SQL时间戳+1小时?

PHP Define() 函数不适用于 unicode utf-8 字符

sql - 使用mysql查询进行数据复制

python - 异步 Django 模型查询是否可行?

PHP 计算数组中的值

php - 检测和查询特定语言