我有一个更新操作,我一次执行多个用户(值保持不变)。出于验证原因,是否可以将表连接到更新语句?sql更新语句与from子句进行验证?
举例来说,这里是我的时刻声明:
$user_set = array(1, 5, 10, 15, .....)
//update 'changed' status for ALL selected users at once
$stmt = $db->prepare("
UPDATE users
SET changed = ?
WHERE user_id IN(". implode(', ', array_fill(1,count($user_set),'?')) .")
");
array_unshift($user_set, 1);
$stmt->execute($user_set);
在一个完美的情况下,我想一个表(计算机)连接到用户表验证帐户所有权,如果此更新“有效'并且应该发生与否。
我在之前发现我可以做的是使用DELETE,但是可以使用UPDATE来完成吗?例如删除使用验证我想:
$selected = array(1, 5, 10, 15, .....)
$stmt = $db->prepare("
DELETE del_table.*
FROM some_table as del_table
LEFT JOIN
users
on users.user_id = del_table.user_id
LEFT JOIN
computers
on computers.computer_id = users.computer_id
WHERE computers.account_id = ? AND del_table.activity_id IN(". implode(', ', array_fill(1,count($selected),'?')) .")
");
// use selected array and prepend other data into the array so binding and execute work in order
array_unshift($selected, $_SESSION['user']['account_id']);
$stmt->execute($selected);
EDIT(液):
感谢亚历克斯...它的作品!
$selected = array(5,10,12,13);
$stmt = $db->prepare("
UPDATE users
INNER JOIN computers
on computers.computer_id = users.computer_id
SET changed = ?
WHERE computers.account_id = ? AND users.user_id IN(". implode(', ', array_fill(1,count($selected),'?')) .")
");
array_unshift($selected, 1, $_SESSION['user']['account_id']);
$stmt->execute($selected);
完美的作品!有没有像这样的INSERT INTO可用?在遇到删除功能后,我实际上查找了有关这方面的信息。我最终做了一个初步的查询,以获得一个有效的user_set,然后使用array_intersect与它和我的'未经验证的'设置给我有效的插入结果...但如果我可以做同样的方法,像这里... – user756659
它将取决于您的要求,但“INSERT INTO ... SELECT”语法可能适合您,您可以在这里阅读更多关于它的信息http://dev.mysql.com/doc/refman/5.6/en/insert-select.html –