2012-03-16 56 views
1

是否可以檢查表中的num行是否爲0,然後執行插入操作,全部在一個sql語句中?在IF語句中的一個表中計算行

這裏是我的查詢,我試過,但它說我有一個語法錯誤:

$query = 
    "IF (SELECT COUNT(ID) FROM votes WHERE userid = $userid AND itemid = $itemid AND itemtype=1) = 0 
     INSERT INTO votes (itemtype, itemid, userid) VALUES (1, $itemid, $userid) 
     SELECT 1 AS result 
    ELSE 
     SELECT 0 AS result 
    END IF"; 

我知道SELECT COUNT位成功的作品自身。

+0

類似的問題在這裏:http://stackoverflow.com/questions/1898472/mysql-if-statement-question – 2012-03-16 15:29:33

+0

我不知道支持該特定語法的SQL數據庫中,所有SQL一邊。在PHP中設置一個變量作爲查詢結果,並在PHP代碼中進行if/else檢查,然後在必要時進行適當的輔助調用。另一種選擇是在查詢中使用case語句來確定插入值。 – ahillman3 2012-03-16 15:33:04

+0

@JeffHines我不認爲這有幫助,因爲我需要在if語句中執行INSERT – Timm 2012-03-16 15:33:05

回答

1

沒有想法如果這是解決這個問題的最好方法,但它會起作用。基本上,它只是導致一個錯誤,如果條件是假的,所以它可以防止插入:

-- make itemtype not nullable then simply insert 
INSERT INTO votes SELECT 
    CASE 
     WHEN 
     (SELECT COUNT(ID) 
     FROM votes 
     WHERE userid = $userid AND itemid = $itemid AND itemtype=1) = 0 THEN 1 
     ELSE NULL 
    END CASE, 
    $itemid, $userid; 
+0

天才。謝謝! – Timm 2012-03-16 15:38:07

+0

啊!這種方法不起作用,因爲SQL不允許你插入一個表,你也在後面的查詢中選擇...任何建議?編輯:管理它與提供SELECT語句一個ID(AS x)醜陋的工作。 – Timm 2012-03-16 15:49:33

+0

插入 - >選擇(上面的更新)工作更好嗎? – cwallenpoole 2012-03-16 19:54:06

0

我沒有進入到MySQL現在來測試這個權利,但將這項工作?

INSERT INTO votes (itemtype, itemid, userid) 
(SELECT 1,$itemid, $userid 
WHERE NOT EXISTS (
    SELECT * 
    FROM votes 
    WHERE itemtype=1 
    AND itemid=$itemid 
    AND userid=$userid))