SQL IF - Sentencia ELSE

Tengo una mesa como esta:

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

¿Es posible hacer esto con la instrucción IF-ELSE de SQL?

  1. Compruebe si hay ID = 1 fila en la tabla
  2. Si la hay , aumente la columna de vista en 1 .
  3. Si no lo hay, inserte una nueva fila en la tabla con ID = 1

Debería ser algo como esto:

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

preguntado el 12 de junio de 12 a las 18:06

Necesitarás un where cláusula en el bit de actualización. -

@JonEgerton, todavía error de sintaxis -

3 Respuestas

La siguiente declaración SQL dará como resultado la lógica IF - ELSE que desea, utilizando el on duplicate key sintaxis.

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

Respondido el 13 de junio de 12 a las 03:06

esto es simplemente la implementación de la sugerencia de Andomar: Brandon Kreisel

una sola declaración es casi siempre más rápida que un procedimiento almacenado y no tiene el requisito de memoria. Los procedimientos son útiles para ejecuciones múltiples o entrada dinámica: Brandon Kreisel

Solo puedes usar MySQL if en un procedimiento almacenado. Por ejemplo:

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 //

Dado su caso de uso, podría estar mejor atendido por MySQL INSERT ... ON DUPLICATE KEY UPDATE.

Respondido el 12 de junio de 12 a las 18:06

puedes agregar UPDATE , también. Por favor. - Eray

Agregado, considere la opción "clave duplicada". Puede hacer esto sin un if declaración. - Andomar

Esperaría el duplicate key opción para rendir mejor. Si quieres estar seguro, mide! - Andomar

on duplicate => 0.0583 - procedure => 0.0009 . Pero on duplicate es mejor para usar una sola vez, creo. - Eray

Por qué no usar

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

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.