在进行更新时,如果用户有权更新此列表,我可以检查相关列,如下例所示:
UPDATE answer
JOIN test ON answer.test_id = test.id
SET
test_answer.answer = 'this is my answer'
WHERE answer.id = 4 AND test.user_id = 8;
我想在插入时做类似的事情,但我不知道怎么做。我试过这样的事情:
INSERT INTO
answer (id, test_id, answer)
VALUES
(null, 10, 'this is my answer')
JOIN
test AS test ON test.id = 10
WHERE
test.user_id = 8;
这里的想法是只有拥有测试的用户才能添加测试答案。
我还可以先获取id为10的测试,检查此测试的user_id是否为8,然后执行插入操作。但我尝试在一个查询中执行此操作。
答案 0 :(得分:1)
INSERT
没有这样的语法可以应用WHERE
子句。如果您希望限制用户添加答案,只有他们有权限。这意味着您需要首先查询test
表,如果用户对此test_id
有特权,则每个答案都应与test_id
相关联。
SELECT test_id from test where test.id = 10 and test.user_id = 8;
如果上述查询返回任何行,则用户有权为此特定测试添加答案。然后,执行您的insert
SQL,您不需要任何WHERE
子句(正如您所尝试的那样)。