发布
社区首页 >问答首页 >如何编写查询,将两个账号及其活动日志合并为一个账号?

如何编写查询,将两个账号及其活动日志合并为一个账号?
EN

Stack Overflow用户
提问于 2008-11-06 21:20:56
回答 3查看 400关注 0票数 0

我们经常有用户创建多个帐户,然后最终多次存储相同的课程活动数据。一旦他们意识到错误,他们就会联系我们,将这些帐户合并为一个他们可以使用的帐户。

我一直在拼命地试图弄清楚如何用MySQL编写一个查询,将他们的活动日志合并到一个配置文件中,这样我就可以删除其他配置文件,但我仍然找不到可以工作的查询。

这些表格如下所示:

代码语言:javascript
代码运行次数:0
复制
CREATE TABLE user_rtab (
    user_id int PRIMARY KEY,
    username varchar,
    last_name varchar,
    first_name varchar
);

CREATE TABLE lessonstatus_rtab (
    lesson_id int,
    user_id int,
    accessdate timestamp,
    score double,
);

发生的情况是,用户最终在两个或多个帐户下学习相同的课程和不同的课程,然后他们希望获取所有课程状态,并将其分配到一个用户帐户下。

是否有人可以提供一个查询,根据用户表中的姓氏和名字字段来确定所有用户帐户,然后只使用用户或用户名字段将所有必要的状态迁移到一个帐户?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-06 21:33:50

我当前的一个客户正面临着类似的问题,除了他们有几十个表必须合并。这是使用现实生活中的主键(自然键)的一个原因。你最好的办法就是在这个问题发生之前尽量避免它。

另一件要记住的事情是,两个人可以共享相同的名字和姓氏。也许你不认为这是一个问题,因为你的用户基础,但如果他们已经创建了多个帐户,多久他们才会开始编造假名或创建几乎相同但不完全相同的名称。通常情况下,通过匹配名字来确定两个人是否相同并不是一件好事。

至于你问题的技术部分,这在很大程度上取决于业务规则是什么。如果他们有两次相同的课程,但分数不同,你会使用最高分吗?您如何决定将所有内容链接到哪个用户帐户?无论如何,这可能是一个多步骤的过程。

票数 1
EN

Stack Overflow用户

发布于 2008-11-06 21:29:10

试图通过最后/第一个合并这些数据是一个可怕的想法,你拥有的用户越多,你就越有可能把不正确的条目网格化。您的表中有ID是有原因的,请使用它们。

我看不出你为什么不能说“我想把用户7合并成12”,然后执行以下操作:

代码语言:javascript
代码运行次数:0
复制
UPDATE lessonstatus_rtab SET user_id=12 WHERE user_id=7;
DELETE FROM user_rtab WHERE user_id=7;
票数 3
EN

Stack Overflow用户

发布于 2008-11-06 21:28:38

假设我们将user_id 2合并为1,这样如何?

这会更新在2下完成但在1下没有完成的课程。

代码语言:javascript
代码运行次数:0
复制
UPDATE lessonstatus_rtab
SET user_id = 1
WHERE user_id = 2
AND NOT EXISTS
(SELECT *
 FROM lessonstatus_rtab e
 WHERE e.lesson_id = lessonstatus_rtab.lesson_id
 AND user_id = 1)

任何剩余的东西都是重复的,现在可以删除:

代码语言:javascript
代码运行次数:0
复制
DELETE FROM lessonstatus_rtab
WHERE user_id = 2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/270325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档