2012-05-21 3 views
0

Уверен, это легко, но проклятый, если я могу заставить его работать.MySQL сложный оператор IF

По существу хочу сделать следующее: (очевидно, что это не является допустимым MySQL)

IF config.a = 1 

THEN 
UPDATE users SET something = 1 
WHERE userlevel > 2 

Таким образом, есть две таблицы, связанные, но не реальная связь между таблицей конфигурации и таблицы пользователей. Таблица конфигурации имеет два столбца, значение и настройку. Мы хотим, чтобы остальная часть запроса выполнялась, если значение строки с настройкой «a» имеет значение «1». Так что это не так просто, как если бы мы искали определенную область.

Причина для запроса: мне нужно выполнить это условно через несколько баз данных в виде одного запроса, и это будет намного проще, чем PHP, соединяющий каждую БД по очереди.

Спасибо как всегда за помощь.

+0

Как выглядит ваша таблица 'config'? –

+3

Нет связи между конфигом и пользователями? Почему бы не просто «обновить пользователей, настроить config users.something = 1 где config.a = 1 и userlevel> 2»? – Stuart

ответ

0
UPDATE users u, 
(
SELECT a FROM config 
) c 
SET u.something = 1 
WHERE 
    u.userlevel > 2 
AND c.a = 1 
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 

Но это один из тех случаев, когда вам нужно сделать два запроса и запустить (или не работать) один за другой.

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 в подзапросе.