MySQL: 0 bir alan ayarı tüm satırları güncelleniyor, ancak 1 tek satırın alanını ayarlama

5 Cevap php

0 rows 'alanına bir seçim güncelleştirmek için etkili bir yolu var mı, ama bir kimliği dayalı 1 bu satırlardan biri ayarlayın.

Temelde, bir veritabanındaki birden çok nesne var ve ben bir "inuse" bunların arasında geçiş yapmak istiyorum, böylece sorgu = 0 InUse için = 1 ve diğerlerini InUse için (id) satırlardan birini koyacaktır.

Teşekkürler :)

5 Cevap

Emin

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

id aksi ABCD ve 0 ise 1'e inuse alanını olacaktır.

UPDATE  table
SET     inuse = (id = @id)
WHERE   id = @id
        OR inuse

Bu sadece ilgili satır güncellenir.

Denemek

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

ya da kısa

update tbl set inuse = test;

örneğin

update tbl set inuse = name = 'foo';

Eğer bir bayrak ayarlamak sonra, bu yüzden kod başka hiçbir parçası aynı anda aynı nesne kullanıyorsa arama kodu = 1 inuse setleri ve yapıldığı zaman sıfırlar eğer, daha iyi olur. Aksi takdirde INUSE Bir nesne olarak (satır) işaretlemek için bir iş parçacığı sona erecek ve başka bir iş parçacığı başka bir nesneye ihtiyacı varsa o, o ise hala kullanımda, ilkini sıfırlanır.

Bu durum böyle değil ve sadece biri için inuse ayarlamak ve tüm diğerleri sıfırlamak mümkün isterseniz, kullanabilirsiniz:

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

Veritabanı işlemleri kullanıyorsa, bunu yapmak için en iyi yoldur:

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

Eğer işlemleri kullanarak değilseniz, o zaman VAKA kullanarak diğer cevabı taşınabilir beri en iyi seçenektir. ancak iki UPDATE tablo daha fazla CPU zaman gerektirecektir.