【问题标题】:mysql - how to combine two rows together if they have the same valuesmysql - 如果两行具有相同的值,如何将它们组合在一起
【发布时间】:2022-01-16 01:31:59
【问题描述】:

所以我有一个表格,我在其中添加了一些细节。现在,假设我提交了包含以下详细信息的表单:

id_s: 3
id_m: 1
quantity: 5

一切都好,信息存储在表中的一行。 (见下文)

接下来,如果我提交带有以下内容的表单:

id_s: 3
id_m: 1
quantity: 3

该表将包含两行具有相同值的行,而不是与信息合并的行(见下文)

我应该设置什么条件才能将它们合并成一行,这样它就会成为数量的总数?

【问题讨论】:

  • id_substatieid_medicament 是这个表的主键还是唯一键?
  • 不,它们不是唯一的或主要的,因为它们不应该是
  • @Cristian25 您问题中的所有内容都表明id_substatie, id_medicament is 的组合是主键,因此应该是唯一的。如果要合并行,什么时候可以不合并?
  • 我的错……我才意识到我说了什么。是的,它们是独一无二的

标签: mysql sql


【解决方案1】:

如果前两列是唯一的,这是我对您的描述的期望,那么您可以这样做:

mysql> create table mytable  ( id_substatie int, id_medicament int, cantitate int );

mysql> alter table mytable add primary key (id_substatie, id_medicament);

mysql> insert into mytable values (3,1,5);

mysql> insert into mytable values (3,1,3) 
       on duplicate key update cantitate=cantitate+values(cantitate);

mysql> select * from mytable;
+--------------+---------------+-----------+
| id_substatie | id_medicament | cantitate |
+--------------+---------------+-----------+
|            3 |             1 |         8 |
+--------------+---------------+-----------+
1 row in set (0.00 sec)

表达式cantitate+values(cantitate) 表示该列的旧值加上您尝试插入的新值。

【讨论】:

  • 这似乎不适用于我的查询。你能检查出什么问题吗?我试着自己弄清楚,但似乎没有得到这个想法。虽然我理解你的解决方案,这似乎是逻辑INSERT INTO `substatie_stoc`(`id_substatie`, `id_medicament`, `cantitate`) VALUES ('". $_POST['substatii'] ."','". $medid ."','". $med_quantity ."') ON DUPLICATE KEY UPDATE cantitate = cantitate + VALUES(cantitate)
  • 您能否运行SHOW CREATE TABLE substatie_stoc 并在上面编辑您的问题以包含结果?我怀疑您对所需的列并没有真正的唯一约束,并且您确实需要 ON DUPLICATE KEY 来检测行存在。
  • 或者,更传统的做法,将(id_substatie, id_medicament) 设为主键。
  • 是的,我没有让它们在结构上如此独特。非常感谢你们这些好人!
【解决方案2】:

您基本上可以在每次插入之前为此使用触发器

   Create trigger t_sample on
   sample before insert
   For each row
   Begin
   Update sample s set 
   s.quantity=:OLD.quantity+:NEW.quantity 
   where s.id_s=:NEW.id_s and s.id_m=:NEW.id_m
    and s.quantity <>:NEW.quantity 
   ;
   End;
   /
    

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多