我的数据库中有轨道和专辑。每首轨道都可以属于一张专辑。用户可以更新属于专辑的轨道。
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/