【问题标题】:Laravel 5.1 deleting duplicates in DB with eloquentLaravel 5.1 雄辩地删除数据库中的重复项
【发布时间】:2016-04-01 10:42:01
【问题描述】:

我想知道如何删除数据库表中的重复条目,并将新副本保留在表中。我的桌子是这样的:

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

由于我是从其他数据库导入,并且我想每天导入一次所有数据,这意味着数据库中已经存在一些现有条目,并且还有新条目。 由于我只需要保留新条目,因此我需要删除所有旧条目(不是新条目的重复条目和唯一条目)。 有没有办法在 Laravel 5.1 中使用 Eloquent 来做到这一点? 我已经尝试过了,但它正在删除表中的所有内容:

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

【问题讨论】:

    标签: sql eloquent laravel-5.1


    【解决方案1】:

    试试这个

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

    查询可能如下所示:

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

    查看Delete all Duplicate Rows except for One in MySQL?

    【讨论】:

    • 这给了我以下错误:Connection.php 第 651 行中的 QueryException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以在 'as n1 from questions as n1 inner join questions as n2 on n1.id > @987654331 上使用正确的语法@questions` as n1 from questions as n1 inner join questions as n2 on n1.id > n2.n2.id =@2n12@2. .external_id)
    • 查看以上链接。如果 eloquent 不起作用,请使用查询生成器,您甚至可以在其中放置原始 sql。但首先检查测试数据库中的 SQL 是否有效。
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2021-12-04
    • 1970-01-01
    • 2022-01-21
    • 2018-09-23
    相关资源
    最近更新 更多