基于现有行的受控 table 查询

Controlled table quering based on existing rows

我有一个 product_group table,其中包含以下字段:group_id、product_id、订单。 table 将被大量查询:单一表单视图可以插入新记录 and/or 通过一次提交更新现有记录。

我正在尝试找出涵盖以下 3 种情况的最佳解决方案:

  1. 用户尝试插入现有行:什么都不做。此处 3 列的唯一索引可能很有用。

  2. 用户仅更改订单列:执行更新。

  3. 用户插入一组全新的值:执行插入。

有没有办法将所有这些放在一个 MySQL 查询中?如果没有,这里最好的方法是什么?目标是尽可能限制数据库查询。

这是你想要的吗?

insert into product_group(group_id, product_id, `order`)
    values (@group_id, @product_id, @order)
    on duplicate key update `order` = values(`order`);

连同 group_id, product_id 上的唯一索引:

create unique index idx_product_group_2 on product_group(group_id, product_id)

这处理了你的三种情况:

  1. 因为如果值相同,则赋值是空操作。
  2. 如果其他两个具有相同的值,order 列将被更新。
  3. 将插入具有不同 group_idproduct_id 的新行。

请注意,order 是列的糟糕名称,因为它是 SQL 关键字。