![](/img/trans.png)
[英]MySQL SELECT results from 1 table, but exclude results depending on another table?
[英]MySQL SELECT pattern replace with results from another table
如何用文本匹配替换另一个表中的行的SELECT中的值?
**products**
> +-------+--------------------------------------------------+
> | id | description |
> +-------+--------------------------------------------------+
> | 10001 | This product is %block1% and %block4% |
> | 10002 | This product is %block2%, %block3%, and is %block4% |
> +-------+--------------------------------------------------+
**descriptions**
> +-----------+-------------------+
> | blockname | blockcontent |
> +-----------+-------------------+
> | %block1% | 5 feet tall |
> | %block2% | matte white |
> | %block3% | makes music |
> | %block4% | made of real wood |
> +-----------+-------------------+
理想情况下,我想运行一个返回
> +-------+--------------------------------------------------+
> | id | newdescription |
> +-------+--------------------------------------------------+
> | 10001 | This product is 5 feet tall and made of real wood |
> | 10002 | This product is matte white, makes music, and is made of real wood |
> +-------+--------------------------------------------------+
我已经研究了REPLACE()和SUBSTITUTE(),但它们似乎并不是我想要的。
您可以创建函数:
DROP FUNCTION my_subst;
DELIMITER $$
CREATE FUNCTION my_subst(str VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
DECLARE pos1 INT DEFAULT 0;
DECLARE pos2 INT DEFAULT 0;
DECLARE token VARCHAR(255);
DECLARE new_token VARCHAR(255);
label1: LOOP
SET pos1 = LOCATE('%%',str);
IF pos1 = 0 THEN
LEAVE label1;
END IF;
SET pos2 = LOCATE('%%',str,pos1+1);
IF pos2 = 0 THEN
LEAVE label1;
END IF;
SET token = SUBSTR(str,pos1,pos2-pos1+2);
SELECT blockcontent INTO new_token FROM descriptions WHERE blockname = token;
SET str = REPLACE(str,token,new_token);
END LOOP label1;
RETURN str;
END;
$$
DELIMITER ;
然后只需使用此函数进行替换即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.