gpt4 book ai didi

mysql - MySQL 独特的列组合

转载 作者:行者123 更新时间:2023-11-29 13:40:00 25 4
gpt4 key购买 nike

我有一个表可以计算两个用户之间的相似度;例如

user1   user2    similarity
1 3 0.7
2 1 0.9
... ... ...
... ... ...
... ... ...

我需要的是对表格进行建模,以便一旦有了上面的模型,就可以插入以下内容:

replace into table values(3,1,0.4)

实际上会更新第一行。对于这种情况有标准做法吗?也就是说,user1 和 user2 的组合必须是唯一的,例如:(3,1) 应被视为与 (1,3) 相同。

最佳答案

我相信你必须求助于这样的存储过程:

CREATE PROCEDURE InsertOrUpdateSimilarity (
pu1 INT, pu2 INT, ps FLOAT -- user1, user2, similarity
)
BEGIN
-- try to update either (pu1, pu2) or (pu2, pu1)
UPDATE similarities SET similarity = ps
WHERE (user1 = pu1 AND user2 = pu2) OR (user1 = pu2 AND user2 = pu1) ;

IF ROW_COUNT() = 0
THEN -- no row has been updated, record must be created
INSERT INTO similarities VALUE (pu1, pu2, ps) ;
END IF ;
END ;

@Vatev 的解决方案乍一看似乎很有吸引力,但我认为不可能用触发器实现所需的行为。这是因为

1) 不可能将 UPDATE 转换为 INSERT,反之亦然,since :

[A trigger] is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger

2) UPDATE 触发器只能访问当前正在修改的行

关于mysql - MySQL 独特的列组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com