我需要编写MySql脚本,以便每周左右自动更改Redmine bugtracker中的成员角色。问题是我获得了用户登录,并且有很长的方法可以获得成员角色ID(你可以通过在find_in_set函数中使用嵌套选择来解决)。 我做了这个查询,它实际显示了我想要的内容,但表格没有更新:
SELECT REPLACE (role_id, '6', '4') as role_id
FROM member_roles
WHERE FIND_IN_SET( member_roles.member_id , (
SELECT member_roles.member_id
FROM members,users,member_roles, roles
WHERE members.id=member_roles.member_id
AND members.user_id=users.id
AND member_roles.role_id=roles.id
AND users.login='user01'))
此查询的结果是:
-----------
| role_id |
-----------
| 4 |
-----------
我不知道如何更新表而不是仅显示此查询的结果。 任何帮助将不胜感激。
答案 0 :(得分:1)
您只需将该查询放在update子句中,例如:
UPDATE member_roles SET YOUR_FIELD(S)_TO_UPDATE=VALUE(S)
WHERE role_id=(YOUR_SELECT_CLAUSE)
如果您有多个结果,可以在where子句中将运算符更改为IN
答案 1 :(得分:0)
我将整个事情转换为multi-table syntax for UPDATE:
UPDATE member_roles
JOIN members ON members.id = member_roles.member_id
JOIN users ON members.user_id = users.id
JOIN roles ON member_roles.role_id=roles.id
SET member_roles.role_id = '4'
WHERE member_roles.role_id = '6'
AND users.login='user01'
请注意,我已添加role_id = '6'
条件以允许您发送REPLACE()
声明 - 我不确定您是否愿意。
我希望我的所有条件都正确无误 - 您可能希望首先对此进行测试:
SELECT role_id
FROM member_roles
JOIN members ON members.id = member_roles.member_id
JOIN users ON members.user_id = users.id
JOIN roles ON member_roles.role_id=roles.id
WHERE member_roles.role_id = '6'
AND users.login='user01'
检查并确保您获得的记录数量与之前相同。
答案 2 :(得分:0)
试试这个:
UPDATE member_roles
set role_id='4'
WHERE FIND_IN_SET( member_roles.member_id , (
SELECT member_roles.member_id
FROM members,users,member_roles, roles
WHERE members.id=member_roles.member_id
AND members.user_id=users.id
AND member_roles.role_id=roles.id
AND users.login='user01'))