多个更新查询

时间:2013-06-05 13:56:24

标签: php mysql

我有一个更新查询,它更新了2个表,其中一个表用不同的别名复制。引擎是MySQL。如果我单独运行这三个查询,它们可以正常工作,但是如果我将它们全部放在一个查询中,它就会失败。

这是查询:

UPDATE
    users AS u1,
    users AS u2,
    customer AS c
SET
    u1.`active` = '1',
    u2.`address` = 'something 234',
    c.`status` = '3'
WHERE
    (u1.`user_name` = 'Tomas'
        AND u1.`user_lastname` = 'Smith'
        AND u1.`user_middle` = 'Nikolas')
    AND (u2.`user_type` = '5'
        AND u2.`user_email` = 'an_email@gmail.com'
        AND u2.`register_date` = 'some_date')
    AND c.`id` = '8';

如果我单独运行查询,那么用户表更新不会更新任何行(没关系),而客户只更新一行(也没关系)。

我期待只在一个查询中完成所有操作而不是三个查询。

这三个查询如下所示:

UPDATE users AS u1 SET u1.`active` = '1' WHERE u1.`user_name` = 'Tomas' AND u1.`user_lastname` = 'Smith' AND u1.`user_middle` = 'Nikolas';

UPDATE users AS u2 SET u2.`address` = 'something 234' WHERE u2.`user_type` = '5' AND u2.`user_email` = 'an_email@gmail.com' AND u2.`register_date` = 'some_date';

UPDATE customer AS c SET c.`status` = '3' WHERE c.`id` = '8';

我希望所有这些都在我之前向您展示的一个查询中。这些查询之间没有任何关系,只是我想一次性运行以进行改进的不同查询。

我不知道是否可能。

感谢您阅读我的问题。

3 个答案:

答案 0 :(得分:1)

mysql_query(已弃用!)或mysqli::query等函数不支持多个语句。

你需要mysqli::multi_query这样的东西。

答案 1 :(得分:0)

我认为您无法使用一个查询更新多个表。仅在一个表more to that here中允许唯一的多个更新命令(完全读取以加速它)

答案 2 :(得分:0)

每个查询似乎都有自己的WHERE条件 - 我不认为将它们组合在一起会起作用,因为所有条件都必须为真,才能更新每一行。

此外,我没有看到这提供任何接近足够的性能改进,以保证这个代码将变得不可行/不合逻辑。我绝对建议将这些作为单独的查询。