1

私はこのようなテーブルを持っています:

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

SQL の IF-ELSE ステートメントでこれを行うことは可能ですか?

  1. テーブルに ID=1 行があるかどうかを確認します
  2. ある場合は、ビューの列を 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
4

3 に答える 3

3

次の SQL ステートメントは、on duplicate key構文を使用して、目的の IF - ELSE ロジックになります。

insert into wp_viewcount values(1,1) on duplicate key update view=view+1;
于 2012-06-12T17:47:46.510 に答える
2

ifストアド プロシージャではMySQL のみを使用できます。例えば:

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.

于 2012-06-12T17:38:51.567 に答える
1

使わない理由

if not exists (select * from wp_viewcount where id = 1)
begin
    --insert logic
end
else
begin
    --update logic
end
于 2012-06-12T17:31:18.630 に答える