我的查询一直有效,直到我意识到如果表格为空,max
不起作用。我为用户检查position
,然后插入一个位置更高的行。如何设置一个案例,如果没有相应user_id的行,我插入一个位置为1的行?我试图做一个案例陈述,但它没有用,我淹没在Mysql语法中。
以下是原始
$stmt = $dbh->prepare("
insert into
dashboard_data
(position, user_id)
select
max(position) + 1,
:userid
from
dashboard_data
where
user_id = :userid
");
这是我对案件陈述的错误尝试
insert into
dashboard_data
(position, user_id)
select
case
when exists
max(position)
then
max(position) + 1
else
1
end case,
:userid
from
dashboard_data
where
user_id = :userid
答案 0 :(得分:2)
使用coalesce()
:
insert into dashboard_data(position, user_id)
select coalesce(max(position), 0) + 1,
:userid
from dashboard_data
where user_id = :userid;
答案 1 :(得分:1)
您可以使用IFNULL,它允许您用其他东西替换NULL值。
https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull