Pregunta

Necesito seleccionar datos cuando se ve una página y actualizar la columna "vistas". ¿Hay alguna manera de hacer esto en una consulta o tengo que usar consultas distintas?

¿Fue útil?

Solución

Si no desea/necesita utilizar una transacción, puede crear un procedimiento almacenado que primero actualice el recuento de vistas y luego seleccione los valores y se los devuelva al usuario.

Otros consejos

Tendrías que hacer esto en dos estados de cuenta en una transacción.

Begin Tran

Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID

Commit Tran

Ayudará si enumeró el RDBMS que está utilizando SQL Server tiene la declaración de salida

Ejemplo

USE AdventureWorks;
GO
DECLARE @MyTestVar table (
    OldScrapReasonID int NOT NULL, 
    NewScrapReasonID int NOT NULL, 
    WorkOrderID int NOT NULL,
    ProductID int NOT NULL,
    ProductName nvarchar(50)NOT NULL);

UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
       INSERTED.ScrapReasonID, 
       INSERTED.WorkOrderID,
       INSERTED.ProductID,
       p.Name
    INTO @MyTestVar
FROM Production.WorkOrder AS wo
    INNER JOIN Production.Product AS p 
    ON wo.ProductID = p.ProductID 
    AND wo.ScrapReasonID= 16
    AND p.ProductID = 733;
SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID, 
    ProductID, ProductName 
FROM @MyTestVar;
GO

PostgreSQL ACTUALIZAR La declaración tiene la cláusula RETURNING que devolverá un conjunto de resultados como una declaración SELECT:

UPDATE mytable
 SET views = 5
 WHERE id = 16
 RETURNING id, views, othercolumn;

Aunque estoy bastante seguro de que esto no es estándar.No sé si alguna otra base de datos lo implementa.

Editar:Me acabo de dar cuenta de que tu pregunta tiene la etiqueta "MySQL".Quizás deberías mencionarlo en la propia pregunta.Sin embargo, es una buena pregunta genérica sobre bases de datos; me gustaría ver cómo hacerlo en otras bases de datos.

Utilicé este truco con Java y SQL Server también te permitirá enviar dos comandos en un solo PreparedStatement.

update tablex set y=z where a=b \r\n select a,b,y,z from tablex

Sin embargo, esto deberá estar en una transacción confirmada de lectura para que funcione como cree que debería.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top