基于现有行的受控表查询

时间:2015-01-07 23:25:27

标签: php mysql database

我有一个 product_group 表,其中包含以下字段:group_id,product_id,order。将对该表进行大量查询:单一表单视图可以通过一次提交插入新记录和/或更新现有记录。

我正在试图找出最佳解决方案来涵盖以下3个案例:

  1. 用户尝试插入现有行:不执行任何操作。这里3列的唯一索引可能很有用。

  2. 用户只更改订单栏:执行更新。

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

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

1 个答案:

答案 0 :(得分:1)

这样做你想要的吗?

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. 因为如果值相同,则值赋值为no-op。
  2. 如果其他两个列具有相同的值,则会更新order列。
  3. 将插入具有不同group_idproduct_id的新行。
  4. 作为一个注释,order是一个糟糕的列名,因为它是一个SQL关键字。