MySQL son güncellenen satırın kimliği almak nasıl?

8 Cevap php

Nasıl PHP kullanarak MySQL son güncellenen satırın ID alabilirim?

8 Cevap

Ben bu sorunun cevabını buldum :)

SET @update_id := 0;
UPDATE some_table SET row = 'value', id = (SELECT @update_id := id)
WHERE some_other_row = 'blah' LIMIT 1; 
SELECT @update_id;

EDIT aefxx tarafından

Bu teknik ayrıca bir güncelleme deyimi etkilenen her satır kimliğini almak için genişletilebilir:

SET @uids := null;
UPDATE footable
   SET foo = 'bar'
 WHERE fooid > 5
   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;

Bu iki nokta üst üste ile birleştirilmiş tüm kimlikleri ile bir dize döndürür.

Bu Salman A'nın cevap olarak aynı yöntem olduğunu, ama burada aslında bunu yapmak için gereken kod.

Otomatik olarak bir satır değiştirildiğinde takip böylece Öncelikle, tabloyu düzenleyin. Yalnızca bir satır ilk takıldığında bilmek istiyorsanız son satırı kaldırın.

ALTER TABLE mytable
ADD lastmodified TIMESTAMP 
    DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP;

Ardından, son güncelleme satırı bulmak için, bu kodu kullanabilirsiniz.

SELECT id FROM mytable ORDER BY lastmodified DESC LIMIT 1;

Bu kod tüm MySQL vs PostgreSQL: Adding a 'Last Modified Time' Column to a Table ve MySQL Manual: Sorting Rows kaldırılır. Ben sadece toplandı.

Hm, ben cevaplar arasında Ben kolay çözüm görmüyorum surprized ediyorum.

Varsayalım, item_id items tabloda bir tamsayı kimlik sütunu olan ve aşağıdaki deyimi ile satırları güncelleme:

UPDATE items
SET qwe = 'qwe'
WHERE asd = 'asd';

Ardından, sağ ifadesinden sonra son etkilenen satır bilmek, biraz aşağıdaki içine ifadeyi güncellemeniz gerekir:

UPDATE items
SET qwe = 'qwe',
    item_id=LAST_INSERT_ID(item_id)
WHERE asd = 'asd';
SELECT LAST_INSERT_ID();

Yalnızca gerçekten değişti satır güncellemek için gerekiyorsa, veri satırında değişecek olmadığını denetleme LAST_INSERT_ID aracılığıyla item_id bir koşullu güncelleştirme eklemek gerekir.

Sadece eklemeler yapıyor ve peirix cevabı başına yapmak, aynı oturumda birini istiyorsanız. Eğer değişiklik yapıyorsanız, size giriş en son güncelleme depolamak için veritabanı şemasını değiştirmek gerekir.

Farklı bir oturumda (yani sadece şu anda çalışan PHP kodu tarafından yapıldığını bir, ama farklı bir istek yanıt olarak yapılan bir) olabilir son değişikliğin, gelen id istiyorsanız, bir ekleyebilirsiniz sofranıza DAMGASI sütun (http://dev.mysql.com/doc/refman/5.1/en/datetime.html bilgi için bakınız) last_modified denilen, sonra da güncelleştirmek zaman, last_modified = CURRENT_TIME ayarlayın.

Having set this, you can then use a query like: SELECT id FROM table ORDER BY last_modified DESC LIMIT 1; to get the most recently modified row.

mysql insert id function önceki INSERT sorgusu tarafından bir Otomatik artma sütun için oluşturulan kimliği döndürür. Ancak, php "son güncelleme satır" almak için hiçbir karşılık gelen işlevi yoktur.

Bir olasılık mysql "UPDATE CURRENT_TIMESTAMP ON" ile TIMESTAMP sütun kümesi kullanmaktır. Sütunu her kayıt için herhangi bir değişiklik üzerinde mysql tarafından şimdiki zaman değiştirilir, böylece son değiştirildiği kaydını almak için bu sütuna göre sıralayabilirsiniz. Sen belgeleri dikkatle okumalısınız.

Hey, ben sadece böyle bir hile gerekli - Ben belki de sizin için çalışacağız, farklı bir şekilde çözüldü. Bu ölçeklenebilir bir çözüm değildir ve büyük veri setleri için çok kötü olacak unutmayın.

Iki parça halinde sorgu bölünmüş -

İlk, güncelleştirmek ve geçici bir tabloda bunları saklamak istediğiniz satır kimlikleri seçin.

ikincisi, güncelleme açıklamada koşulu ile orijinal güncelleme yapmak where id in temp_table olarak değiştirildi.

Ve eşzamanlılık sağlamak için, bu iki adım önce lock masaya gerekir ve daha sonra sonunda kilidi serbest.

Yine, bu limit 1 ile biten bir sorgu için, benim için çalışıyor, ben bile ilk {[(1)] sonucu depolamak için sadece yerine bir değişkeni geçici bir tablo kullanabilirsiniz, ancak yok }.

Ben her zaman sadece tek bir satır güncellemek olacak biliyorum çünkü ben bu yöntemi tercih ve kod basittir.

Son güncelleme satırın kimliği, & kurmak 'updateQuery' kullanmak aynı kimliği bu satırı güncelleştirmek. Yani, sadece zaten istediğiniz o kimliği (çağrı) kaydedin.

last_insert_id() AUTO_INCREMENT bağlıdır, ancak son güncelleme kimliği değil.

Bu kadar uzun Mysql kod gerek yok. PHP, sorgu bu gibi görünmelidir:

$updateQuery = mysql_query("UPDATE table_name SET row='value' WHERE id='$id'") or die ('Error');
$lastUpdatedId = mysql_insert_id();