我能找到的最接近我想要做的是如何复制相关行,但我的经验不足让我迷失了方向。基本上,我想复制一些记录,更改一列并将它们插入同一个表中(因此它几乎是原始数据的副本)。
表menuship是食物菜单的哈希表(表中的每一行都将标识一个菜单类别(例如开胃菜、主菜或甜点)和产品(鱼和薯条)。
表结构:
CREATE TABLE `menuship3` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`headhash` char(40) DEFAULT NULL,
`menucardhash` char(40) DEFAULT NULL,
`menucathash` char(40) DEFAULT NULL,
`producthash` char(40) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `headhash` (`headhash`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
在编程界,我会说我想“分叉”我的数据......
如果我的表格内容是这样的:
| ID | 头哈希 | 菜单卡哈希 | 菜单现金 | 产品哈希 |
|---|---|---|---|---|
| 1 | 啊啊啊啊 | 啊啊啊啊 | 啊啊啊啊 | 啊啊啊啊 |
| 2 | 啊啊啊啊 | 啊啊啊啊 | 啊啊啊啊 | bbb |
| 3 | 啊啊啊啊 | 啊啊啊啊 | 啊啊啊啊 | 抄送 |
| 4 | 啊啊啊啊 | 啊啊啊啊 | bbb | 滴滴 |
| 5 | 啊啊啊啊 | 啊啊啊啊 | 抄送 | ee |
| 6 | 啊啊啊啊 | 其他 | xyz | fgi |
| 7 | 啊啊啊啊 | 其他 | xyz | fgh |
我想用 menucardhash aaa(第 1-5 行)复制所有记录,所以我最终会得到一个包含 12 条记录的表。额外的记录将有新的 menucarhash qqq 而不是 menucardhash aaa。
| ID | 头哈希 | 菜单卡哈希 | 菜单现金 | 产品哈希 |
|---|---|---|---|---|
| 8 | 啊啊啊啊 | 啊啊啊啊 | 啊啊啊啊 | |
| 9 | 啊啊啊啊 | 啊啊啊啊 | bbb | |
| 10 | 啊啊啊啊 | 啊啊啊啊 | 抄送 | |
| 11 | 啊啊啊啊 | bbb | 滴滴 | |
| 12 | 啊啊啊啊 | 抄送 | ee |
结果实际上意味着我有相似的记录,记录 1-5 与记录 8-12 相似 - 区别在于 id 和 menucardhash 列。
我只是要选择 PHP 中的记录,更改 menucathash 并将它们发送回数据库,但我想知道是否有 SQL 查询可以为我执行此操作,从而减少 cpu 周期开销。
这是否可以通过一两个查询实现,或者我最好让 PHP 承担重任?
ype*_*eᵀᴹ 27
这是一个非常简单的INSERT .. SELECT查询。
将id不包含在列列表中,因为它有AUTO_INCREMENT物业,并会自动获取值。您只需要替换'aaa'为要从中复制的 menucardhash 值并'qqq' 使用新值:
INSERT INTO menuship3
(headhash, menucardhash, menucathash, producthash)
SELECT
headhash, 'qqq', menucathash, producthash
FROM
menuship3
WHERE
menucardhash = 'aaa' ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43138 次 |
| 最近记录: |