Tenho uma tabela de Encomendas que tem uma coluna de Quantidade. Durante o check in ou check out, precisamos de actualizar essa coluna de Quantidade por um. Existe uma forma de o fazer numa acção ou temos de obter o valor existente e depois adicionar ou subtrair um por cima?
Outra questão é quando inserimos uma nova linha, precisamos de verificar se existem os mesmos dados e depois inserir se não existem, que são duas etapas, ou existe uma maneira melhor de o fazer?
obrigado,
Para responder ao primeiro:
UPDATE Orders SET Quantity = Quantity + 1 WHERE ...
Para responder ao segundo:
Há várias maneiras de o fazer. Uma vez que não especificou uma base de dados, vou assumir o MySQL.
INSERT INTO tabela SET x=1, y=2 ON DUPLICATE KEY UPDATE x=x+1, y=y+2
Ambos podem responder à sua pergunta. Contudo, a primeira sintaxe permite maior flexibilidade para actualizar o registo em vez de apenas substituí-lo (como a segunda o faz).
Tenha em mente que, para ambos existirem, tem de haver uma chave UNIQUE definida...
UPDATE Orders Order
SET Order.Quantity = Order.Quantity - 1
WHERE SomeCondition(Order)
Tanto quanto sei, não existe suporte integrado para INSERT-OR-UPDATE em SQL. Sugiro a criação de um procedimento armazenado ou a utilização de uma consulta condicional para o conseguir. Aqui é possível encontrar uma colecção de soluções para diferentes bases de dados.