如何在 MySQL 中同时更新多个表中的值?

问题描述 投票:0回答:1

我有一个包含以下列的表(oc_product):

产品_id 型号
1 42
2 43
3 44

我想做

product_id = model

UPDATE oc_product SET product_id = model WHERE model != product_id;

但是我还有另一个带有

query
列的表 (oc_seo_url),该列包含 oc_product 表中的 ID,我也需要更改这些值。

查询 关键字
product_id=1
测试1
product_id=2
测试2
product_id=3
测试3

我想出了如何一次更新一个值:

SET @idValue = 1;
SET @seoIdValue = CONCAT("product_id=", @idValue);

SELECT model INTO @modelValue FROM oc_product WHERE product_id LIKE @idValue;
SET @seoModelValue = CONCAT("product_id=", @modelValue);

UPDATE oc_product SET product_id = @modelValue WHERE model = @modelValue;
UPDATE oc_seo_url SET query = @seoModelValue WHERE query = @seoIdValue;

查询后的结果:

产品_id 型号
42 42
2 43
3 44

查询 关键字
product_id=42
测试1
product_id=2
测试2
product_id=3
测试3

但是我怎样才能一次更新所有内容呢?我需要为此使用循环吗?我想要得到:

产品_id 型号
42 42
43 43
44 44

查询 关键字
product_id=42
测试1
product_id=43
测试2
product_id=44
测试3

我用 while 循环尝试了它,但我不知道它在 MySQL 中应该如何工作:

CREATE PROCEDURE dowhile()
BEGIN

SELECT product_id INTO @idValue FROM oc_product WHERE product_id != model;
SELECT model INTO @modelValue FROM oc_product WHERE product_id LIKE @idValue;

WHILE (@idValue != @modelValue) DO
SET @seoIdValue = CONCAT("product_id=", @idValue);
SET @seoModelValue = CONCAT("product_id=", @modelValue);
UPDATE oc_product SET product_id = @modelValue WHERE model = @modelValue;
UPDATE oc_seo_url SET query = @seoModelValue WHERE query = @seoIdValue;
END WHILE;

END;
mysql database mysqli
1个回答
0
投票

您不需要任何 dowhile() 首先您需要更新 oc_seo_url 表,因为这是我们需要首先更新查询列的依赖表。然后您可以更新 oc_product

update oc_seo_url os
left join oc_product op on op.product_id =  cast(SUBSTRING_INDEX(os.query,'=',-1) AS UNSIGNED)
set os.query = concat(SUBSTRING_INDEX(os.query,'=',1),'=',cast(op.model as char) );

UPDATE oc_product SET product_id = model WHERE model != product_id;
© www.soinside.com 2019 - 2024. All rights reserved.