Pergunta

Eu preciso selecionar dados quando uma página é visualizada e atualizar os 'pontos de vista' coluna há um modo de fazer em uma consulta, ou eu tenho que usar para consultas distintas?

Foi útil?

Solução

Se você não quiser/precisar usar uma transação, você pode criar um procedimento armazenado que primeiro atualiza a exibição da contagem e, em seguida, seleciona os valores e devolvê-los para o usuário.

Outras dicas

Você teria que fazer isso em duas declarações em uma transação

Begin Tran

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

Commit Tran

Ajudaria se você listou a SGBDR que você está usando O SQL Server tem a instrução de SAÍDA

Exemplo

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

Do PostgreSQL ATUALIZAÇÃO instrução tem o RETORNO cláusula que irá retornar um conjunto de resultados como uma instrução SELECT:

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

Tenho certeza que este não é um padrão embora.Eu não sei se outras bases de dados a implementar.

Editar:Só eu que notei que sua pergunta tem o "MySQL" na etiqueta.Talvez você deve mencionar na questão em si.É uma boa base de dados genérico pergunta - eu gostaria de ver como fazer isso em outros bancos de dados.

Eu usei esse truque com Java e SQL Server também permite que você envie dois comandos em uma única PreparedStatement.

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

Isso terá de ser em uma leitura de transação confirmada para o trabalho, como você acha que deveria embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top