2016-04-01 9 views
0

Ich frage mich, wie Sie doppelte Einträge in der DB-Tabelle löschen und die neuen Kopien in der Tabelle behalten. Dies ist, wie meine Tabelle wie folgt aussieht:Laravel 5.1 Löschen von Duplikaten in DB mit beredten

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

Da ich aus anderen DB bin importieren, und ich möchte alle Daten einmal täglich importieren, bedeutet, dass es einige bestehende Einträge bereits in der DB sein, und neue Einträge als Gut. Da ich nur die Einträge behalten muss, die neu sind, muss ich alle alten Einträge löschen (Duplikate und eindeutige Einträge, die nicht neu sind). Gibt es eine Möglichkeit, es in Laravel 5.1 mit Eloquent zu tun? Ich habe dies versucht, aber es löscht alles in der Tabelle:

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

Antwort

1

dieses Versuchen

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

Die Abfrage könnte wie folgt aussehen:

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

prüfen Delete all Duplicate Rows except for One in MySQL?

+0

Das gibt mir die folgenden ng Fehler: QueryException in Connection.php Zeile 651: SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax für 'as' n1' aus 'questions' als' n1' innere Join 'Fragen' als' n2' auf 'n1' zu verwenden.' id'> '' in Zeile 1 (SQL: lösche 'Fragen' als' n1' aus 'Fragen' als' n1' innere Verbindung 'Fragen' als' n2' auf 'n1'.'id'>' n2'.'id' wobei 'n1 '.'external_id' = n2.external_id) – Marco

+0

Überprüfen Sie den obigen Link. Wenn eloquent nicht funktioniert, verwenden Sie Abfrage-Generator, wo Sie sogar Raw SQL setzen können. Aber überprüfen Sie zuerst die SQL in Ihrem Test db, wenn das funktioniert oder nicht. – iamkdev