2016-04-01 24 views
0

ile silme DB tablosundaki yinelenen girişlerin nasıl silineceğini ve yeni kopyaların tabloda nasıl saklanacağını merak ediyorum.Laravel 5.1 DB'de çiftleri

$table->increments('id'); 
$table->string('text'); 
$table->string('type'); 
$table->integer('external_id'); 
$table->timestamps(); 

Diğer DB'den ithal ediyorum, ben günde bir kez tüm verileri almak istiyorum beri DB zaten bazı mevcut girişler olacağı anlamına geliyor ve yeni girişler olarak: Bu benim tablo benziyor nasıl iyi. Sadece yeni olan girdileri tutmam gerektiğinden, tüm eski girdileri (yeni olmayan yinelenen ve benzersiz girdiler) silmem gerekir. Laracell 5.1'de Eloquent ile yapmanın bir yolu var mı? Bunu denedim, ama tablodaki her şeyi siliyor: Sorgu aşağıdaki gibi görünebilir

$deleteDuplicates = DB::table('questions')->select('external_id')->distinct()->delete(); 

cevap

1

bu

$deleteDuplicates = DB::table('questions as n1') 
        ->join('questions as n2', 'n1.id', '>', 'n2.id') 
        ->where('n1.name', '=', 'n2.name') 
        ->delete(); 

deneyin:

DELETE n1 FROM questions n1, questions n2 WHERE n1.id > n2.id AND n1.name = n2.name

Kontrol Delete all Duplicate Rows except for One in MySQL?

+0

Bu bana aşağıdakileri veriyor ng hatası: Connection.php satırında QueryException 651: SQLSTATE [42000]: Sözdizimi hatası veya erişim ihlali: 1064 SQL sözdiziminizde bir hata var; 'n1' iç birleşmesi 'soruları' n1 'n1'.'id'> '' olarak' as'n1'nın 'asıl' seçeneğinin yakınında kullanmak için doğru söz dizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin 1. satırda (SQL: soruları "n1" olarak "n1" olarak "soru" olarak "n1" iç birleştirme "soruları" n1 "n1" n1 "nı" n2'dir. '.'external_id' = n2.external_id) – Marco

+0

Yukarıdaki bağlantıyı kontrol edin. Eloquent işe yaramadıysa bile, sql sql koyabilirsiniz nerede sorgu oluşturucu kullanın. Ama eğer işe yarayıp yaramadığına bakarsak, test db'nizde SQL'i kontrol edin. – iamkdev

İlgili konular