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

标签 php mysql sql

我想更新下表的值(行和 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/

相关文章:

mysql - SQL 搜索未找到所有值

php - 这有点过分还是我做对了?

php - 内部加入 codeigniter 复制结果

php - 我如何使用 Windows 的 DIRECTORY_SEPARATOR

php - 在没有登录的情况下在 linux 中运行远程脚本

php - 自动增量在 PHP 忽略方法中不起作用

php - 按时间戳排序已损坏?

javascript - 如何知道MYSQL语句中哪个字段不匹配

c# - Linq-To-Sql 将字符串转换为具有特定格式的日期

Python - 将多个插入语句转换为一个