我正在使用node.js和mysql为学校制作一个Tinder克隆,并且有一个涉及喜欢和不喜欢的人的系统。遗憾的是,我将很多数据库建立在用户选择的用户名上,现在我遇到了用户想要更改用户名的问题,我需要更改数据库中的所有实例。 (我知道我应该使用用户ID代替,但此时由于项目即将完成而无法改变,而且只是为了学校的学习目的。)我根据用户名所在的位置更改一列或另一列中的数据时遇到问题。我的数据库表示例如:
Liker | Liked
-------------------
jennifer | matt
jennifer | colin
jennifer | justin
joe1 | sarah
joe1 | tammy
joe1 | lindsay
celine6 | joe1
celine6 | curtis
因此,例如,如果joe1已经决定他现在想要使用用户名buffdude27,我尝试在节点中使用以下查询,使用mysql中间件更改表中的所有名称实例:
var change = ['buffdude27', 'buffdude27', 'joe1', 'joe1'];
connection.query('UPDATE likes SET liker = ? OR liked = ? WHERE liker = ? OR liked = ?', change, function(err, results){
...the actions I take after the query happens...
});
我遇到的问题是,它会找到joe1的所有实例,并用0替换他的用户名。我做错了什么,这样做的正确方法是什么?提前感谢您的帮助!
答案 0 :(得分:0)
运行两个简单的查询:
UPDATE likes SET liker = 'buffdude27' WHERE linker = 'joe1';
UPDATE likes SET liked = 'buffdude27' WHERE linked = 'joe1';
或者更复杂的一个:
UPDATE likes
SET liker = CASE WHEN linker = 'joe1' THEN 'buffdude27' ELSE linker END,
liked = CASE WHEN linked = 'joe1' THEN 'buffdude27' ELSE linked END
WHERE 'joe1' IN (liker, liked)
更好的方法是拥有一个包含users
列和user_id
列的name
表格。并在likes
表(liker_user_id
,liked_user_id
)中存储引用(外键)。
如果用户决定更改其名称,则只需更新name
表中的users
列。引用user_id
的所有其他表格都需要更改。