我想在一个包含五列的表中插入一行数据(此表连接成员和游戏);五列中有四列是已知的,而第四列则必须动态计算:
wishlists(id (int, pk), memberid (int, FK), gameid(int, FK), rank (int), createdat(timestamp) )
INSERT INTO wishlists (memberid, gameid, rank)
VALUES (somememberid, somegameid, )
值排名需要搜索表并查找属于某个成员的所有记录,计算出排名,并插入排名最低的新记录。
rank = MAX(ISNULL(Rank,0))+1
我尝试了一些变体,但我无法正确使用语法。我知道如何在两个查询中执行此操作,但我无法弄清楚如何在一个查询中执行此操作。
编辑以下代码,我之前使用的代码,产生[Err] 1582 - Incorrect parameter count in the call to native function 'ISNULL'
insert into wishlists (memberid, gameid, rank)
select
memberid,
gameid,
MAX(ISNULL(Rank,0))+1
from wishlists;
答案 0 :(得分:3)
INSERT
INTO wishlists (memberid, gameid, rank)
SELECT @memberid, @gameid, COALESCE(MAX(rank), 0) + 1
FROM wishlists
WHERE memberid = @memberid
替换您的实际memberid
和gameid
代替@
- 前缀参数。
答案 1 :(得分:1)
不完全确定我理解您的架构,但您可能希望使用SQL语句插入...
insert into wishlists (memberid, gameid, rank)
select
memberid,
gameid,
MAX(IFNULL(Rank,0))+1
from wishlists;
编辑:语法...应该是“ifnull”。