基于删除重复记录在数据库级别上有很多关系



我有一个产品表,它有很多变体。每个变体在option_variant表中都有两条记录,包括大小和颜色Id。出于某种原因,为产品创建了重复的变体。也就是说,一个产品有多个相同颜色和尺寸的变体。我的问题是如何在数据库级别找到并删除这些重复的变体。表中有太多的记录,我不想在PHP代码中处理这种情况。我的应用程序是用Laravel 8(PHP(编写的,并使用MariaDB 10.4存储数据。数据库设计

MySQL触发器是另一个选项,当你想在php以外的地方处理验证时,如果你没有,你需要研究它们。

我不能发表评论,因为我的低于50

我使用以下查询解决了问题:

DB::table('option_variant as v1')
->join('option_variant AS v2', function ($join) {
$join->on('v2.variant_id', '=', 'v1.variant_id');
$join->on('v2.option_id', '<>', 'v1.option_id');
})
->join('variants', 'variants.variant_id', '=', 'v1.variant_id')
->selectRaw('
concat(v1.option_id, ".", v2.option_id) as combined_options,
group_concat(variants.variant_id) as combined_variants,
count(variants.variant_id) as variants_count,
variants.variant_id
',
)
->groupBy('product_id' ,'combined_options')
->havingRaw('count(variants.variant_id) > 1')
->get()

最新更新