gpt4 book ai didi

php - 复制(更新)同一张表中的某些内容

转载 作者:行者123 更新时间:2023-11-29 04:14:58 24 4
gpt4 key购买 nike

我想更新下表的值(行和 col_md):

Current Data

| id  | id_cat | row  | col_md |
| --- | ------ | ---- | ------ |
| 1 | 1 | 1 | 4 |
| 2 | 1 | 2 | 5 |
| 3 | 1 | 3 | 5 |
| 4 | 2 | 1 | 3 |
| 5 | 2 | 2 | 4 |
| 6 | 2 | 2 | 4 |
| 7 | 3 | 1 | 12 |
| 8 | 3 | 1 | 12 |
| 9 | 3 | 2 | 3 |

这可能类似于下表。 (我希望在 id_cat=2 和 3 的行中具有与 id_cat=1 相同的行内容)。

Required Data :

| id  | id_cat | row  | col_md |
| --- | ------ | ---- | ------ |
| 1 | 1 | 1 | 4 |
| 2 | 1 | 2 | 5 |
| 3 | 1 | 3 | 5 |
| 4 | 2 | 1 | 4 |
| 5 | 2 | 2 | 5 |
| 6 | 2 | 3 | 5 |
| 7 | 3 | 1 | 4 |
| 8 | 3 | 2 | 5 |
| 9 | 3 | 3 | 5 |

id_cat 2 和 3 应具有与 id_cat=1 中相同的“行”和“col_md”值。

我试过 this像这样发布第一个答案:

UPDATE `myTable` AS t1 JOIN `myTable` AS t2 ON t2.id_cat=1
SET t1.row = t2.row, t1.col_md = t2.col_md
WHERE t1.id_cat = 2 or t1.id_cat=3;

但这会导致所有“行”列的值都等于 1。

我哪里做错了,正确的方法是什么?

编辑:

上面的表格只是为了让这个问题更容易理解的例子,但真正的表格更大(4k 行)并且:

  • id_cat=1 的“行”列可以有任何数字,而不是示例中的序列。
  • “col_md”列也可以有任意数字。
  • 这就是为什么更新必须在 id_cat!=1“行”和“col_md”值中设置 id_cat=1“行”和“col_md”值的副本。

如果仅用 MySQL 无法做到这一点,php 脚本也不错。

最佳答案

在您提供的示例查询中,您正在使用 t2.row 更新 t1.row。当您加入 id_cat 时,这将导致选择多行来更新单行,因此结果只取第一行。

你真正想要的是在更新中建立一对一的关系,所以你的查询中需要改变的是在连接中添加行匹配并删除 SET 中的赋值,就像这样:

UPDATE `myTable` AS t1 JOIN `myTable` AS t2 ON t2.id_cat=1 AND t1.row = t2.row
SET t1.col_md = t2.col_md
WHERE t1.id_cat = 2 or t1.id_cat=3;

然后给出输出:

MariaDB [testart]> select * from myTable;
+------+--------+------+--------+
| id | id_cat | row | col_md |
+------+--------+------+--------+
| 1 | 1 | 1 | 4 |
| 2 | 1 | 2 | 5 |
| 3 | 1 | 3 | 5 |
| 4 | 2 | 1 | 4 |
| 5 | 2 | 2 | 5 |
| 6 | 2 | 3 | 5 |
| 7 | 3 | 1 | 4 |
| 8 | 3 | 1 | 4 |
| 9 | 3 | 2 | 5 |
+------+--------+------+--------+
9 rows in set (0.00 sec)

关于php - 复制(更新)同一张表中的某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55068886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com