2009-06-18 8 views

Odpowiedz

22
UPDATE `table` 
SET `inuse` = (`id` = 23) 
+1

To też jest bardzo eleganckie :) –

+0

Czy uważasz, że jest to szybsze/wydajniejsze niż Artem? – Joel

+0

Myślę, że to prawie to samo, jeśli nie dokładnie to samo. –

11

Sure

UPDATE table SET inuse=IF(id=ABCD, 1, 0) 

by ustawić pole Inuse do 1 czy id jest ABCD i 0 w przeciwnym razie.

0
UPDATE myTable 
SET Field = 0 
WHERE FieldID <> [WhateverID] 

UPDATE myTable 
SET Field = 1 
WHERE FieldId = [WhateverID] 
0

Spróbuj

update tbl set inuse = if(test, 1, 0); 

lub krótszy

update tbl set inuse = test; 

np

update tbl set inuse = name = 'foo'; 
1
UPDATE table 
SET  inuse = (id = @id) 
WHERE id = @id 
     OR inuse 

Spowoduje to aktualizację tylko odpowiednich wierszy.

0

Jeśli chcesz ustawić flagę, więc żadna inna część kodu nie używa tego samego obiektu w tym samym czasie, lepiej, jeśli kod wywołujący włączy = 1 i zresetuje go po zakończeniu. W przeciwnym razie skończysz jeden wątek, aby oznaczyć obiekt (wiersz) jako używany, a następnie, jeśli inny wątek potrzebuje innego obiektu, zresetuje pierwszy, pozostając w użyciu.

Jeśli tak nie jest, a po prostu chcesz być w stanie ustawić Inuse dla jednego, i przywrócić wszystkie inne, można użyć:

UPDATE myTable 
SET InUse = CASE 
    WHEN myTable.id = @id THEN 1 
    ELSE 0 
END 
0

jeśli baza danych używa transakcji, jest to najlepszy sposób aby to zrobić:

update myTable set inuse = 0; 
update myTable set inuse = 1 where id = ?; 

jeśli nie używasz transakcji, potem drugą odpowiedź za pomocą przypadek jest najlepszym rozwiązaniem, ponieważ jest przenośny. ale będzie wymagać więcej czasu procesora niż dwie instrukcje UPDATE.

Powiązane problemy