我有一个表“cat_id”,其中包含字段 id 和类别,如下所示:
id category
1 23/47/2345/765
2 93/3/256/23/4700
3 23/47/443
4 76/223/5
以及其他包含每个类别名称的表。该表“描述”如下所示:
id name
23 abc
47 xyz
2345 aabbcc
765 xxyyzz
93 .....
现在我想更新表“cat_id”并替换并使用这些名称而不是类别 ID
结果:
id category
1 abc/xyz/aabbcc/xxyyzz
2 .....
最佳答案
DELIMITER $$
DROP FUNCTION IF EXISTS split_count$$
CREATE FUNCTION split_count(str VARCHAR(200), delim CHAR(1)) RETURNS INT
RETURN (LENGTH(REPLACE(str, delim, CONCAT(delim, ' '))) - LENGTH(str)) $$
DROP FUNCTION IF EXISTS split_replace$$
CREATE FUNCTION split_replace(str VARCHAR(200), delim CHAR(1)) RETURNS VARCHAR(200)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE rstr VARCHAR(200) DEFAULT NULL;
WHILE i <= split_count(str, delim)
DO
SELECT `name` INTO @replaced_name FROM description WHERE id = SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, i+1), delim, -1);
SET rstr = CONCAT_WS(delim, rstr, @replaced_name);
SET i = i + 1;
END WHILE;
RETURN rstr;
END $$
DELIMITER ;
UPDATE cat_id SET category = split_replace(category, '/');
关于mysql - 用 mysql 中其他表中的相应描述替换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444811/