我有一些表格:
#comments
| id| text |
----------------
| 1 | aa bb cc |
#words
| id| word |
------------
| 1 | aa |
| 2 | bb |
然后我运行此查询
UPDATE comments AS c
LEFT JOIN
words AS w ON (c.text LIKE CONCAT('%', w.word, '%'))
SET
c.text = REPLACE(
c.text,
w.word,
CONCAT('<b>', w.word, '</b>')
)
结果我在评论表中有这些数据
| id| text |
-----------------------
| 1 | <b>aa</b> bb cc |
如何更改我的查询以获得结果?
| id| text |
------------------------------
| 1 | <b>aa</b> <b>bb</b> cc |
答案 0 :(得分:0)
评论时间太长了。
简单的答案是,您无法使用单个MySQL update
语句执行所需操作。您可能在#words
表中有多行与#comments
表中的给定行匹配。 documentation:
对于多表语法,UPDATE更新每个名为的表中的行 在table_references中满足条件。 每个匹配的行都是 更新一次,即使它多次匹配条件。
这可以在一些使用递归CTE的数据库中完成。并且,如果您具有正则表达式替换功能,则可能。但是,这些都不是MySQL中的选项。
这给你留下了两个选择。第一种是编写存储过程并在循环中执行update
。第二个是修复数据结构,这样就不会在字符串中存储事物列表。