0

当然这很容易,但该死的,如果我能让它工作的话。

本质上想要做以下事情:(显然这不是有效的MySQL)

IF config.a = 1

THEN
UPDATE users SET something = 1
WHERE userlevel > 2

因此涉及到两个表,但 config 表和 users 表之间没有真正的联系。配置表有两列,值和设置。如果设置为“a”的行的值为“1”,我们只希望查询的其余部分运行。所以这并不像我们正在寻找一个特定的领域那么容易。

询问的原因是我需要在多个数据库中作为单个查询有条件地运行它,这将比 PHP 依次连接到每个数据库更容易。

一如既往地感谢您的帮助。

4

3 回答 3

2

如果您真的想要在单个查询中使用它,那将是:

UPDATE  u.users
CROSS JOIN
        (
        SELECT  1 AS r
        FROM    config
        WHERE   setting = 'a'
                AND value = 1
        ) q
SET     u.something = 1
WHERE   u.userlevel > 2

但是,当您需要执行两个查询并一个接一个地运行(或不运行)时,这是其中一种情况。

于 2012-05-21T18:59:21.587 回答
0
UPDATE users u, 
(
 SELECT a FROM config
) c 
SET u.something = 1
WHERE 
    u.userlevel > 2 
AND c.a = 1
于 2012-05-21T18:57:36.877 回答
0

我认为这对你有用。

SELECT (
    UPDATE users SET something = 1 WHERE users.id = config.user_id
) AS updated
FROM config
WHERE userlevel > 2 AND config.a = 1

如果 config 具有 userId,这将起作用,然后,您在子查询中使用该 ID。

于 2012-05-21T19:05:50.987 回答