2012-05-21 76 views
0

當然,這很容易,但如果我可以得到它的工作,該死的。MySQL複雜的IF語句

本質上要做到以下幾點:(顯然這不是有效的MySQL)

IF config.a = 1 

THEN 
UPDATE users SET something = 1 
WHERE userlevel > 2 

所以有兩個表參與,但配置表和用戶表之間沒有真正的聯繫。配置表有兩列,值和設置。如果設置「a」的行的值爲「1」,我們只希望查詢的其餘部分運行。所以它不像我們正在尋找的特定領域那麼容易。

問題的原因是我需要在多個數據庫中有條件地運行這個查詢作爲單個查詢,並且這將比依次連接到每個數據庫的PHP更容易。

非常感謝您的幫助。

+0

你的'config'表是什麼樣的? –

+3

配置和用戶之間沒有連接?爲什麼不只是「更新用戶,配置設置users.something = 1其中config.a = 1和用戶級別> 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 

這將工作,如果配置有用戶id,然後,您使用該ID的子查詢。