2012-06-12 149 views
1

我有這樣的一個表:SQL IF - ELSE聲明

+-------+------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+------------+------+-----+---------+-------+ 
| ID | bigint(20) | NO | PRI | NULL |  | 
| view | bigint(20) | NO |  | NULL |  | 
+-------+------------+------+-----+---------+-------+ 

是否有可能與SQL的if-else語句來做到這一點?

  1. 檢查是否有在表
  2. 如果有ID = 1點的行,由1增加視圖列。
  3. 如果沒有,插入新行與ID表= 1

應該是這樣的:

IF((SELECT COUNT(ID) FROM wp_viewcount WHERE ID=1) == 0) 
BEGIN 
INSERT INTO wp_viewcount VALUES (1,1) 
END 
ELSE 
BEGIN 
UPDATE wp_viewcount SET view=view+1 WHERE ID=1 
END 
+0

你需要更新位中的where子句。 –

+0

@JonEgerton,仍然語法錯誤 – Eray

回答

3

以下SQL語句將使用on duplicate key語法生成所需的IF-ELSE邏輯。

insert into wp_viewcount values(1,1) on duplicate key update view=view+1; 
+0

這只是Andomar的建議 –

+0

的實施哪一個最適合性能? :) – Eray

+1

單個語句幾乎總是比存儲過程更快並且不包含內存要求。過程對多次執行或動態輸入有幫助 –

1

爲什麼不使用

if not exists (select * from wp_viewcount where id = 1) 
begin 
    --insert logic 
end 
else 
begin 
    --update logic 
end 
+0

'#1064 - 您的SQL語法錯誤' – Eray

+0

更正了正確的語法 – Matt

2

你可以僅在存儲過程中使用MySQL的if。例如:

DELIMITER // 

CREATE PROCEDURE `test_procedure` (IN wp_id INT) 
BEGIN 
IF((SELECT COUNT(*) FROM wp_viewcount WHERE id = wp_id)<1) THEN 
    INSERT INTO wp_viewcount(id,view) VALUES (wp_id,1); 
ELSE 
    UPDATE wp_viewcount SET view=view+1 WHERE ID=wp_id; 
END IF; 
END // 

考慮您的使用情況下,你可能會得到更好的MySQL的INSERT ... ON DUPLICATE KEY UPDATE服務。

+0

您是否也可以添加'UPDATE'。請。 – Eray

+0

新增,請考慮「重複密鑰」選項。你可以在沒有'if'語句的情況下做到這一點。 – Andomar

+0

哪一個表現最好? :) – Eray