我有两个数据库表,其中一个我有一些消息(比如模板),在第二个我有消息中应该替换的值。
我会试着解释一下自己
在表A中我有类似的东西
Id - 消息
1 - “用户{0}已从{1}”
登录
在表B中我有类似的东西
Id - Id消息 - ParamValue - ParamPosition
1 - 1 - Hugo - 0
2 - 1 - 计算机A - 1
我想要的是一条形成的信息,如
用户Hugo已从计算机A登录
像c#中的string.format。
我怎么能这样做,无论参数多少,我该怎么做 消息有吗?
感谢您的帮助!
答案 0 :(得分:0)
正如@Gordon Linoff在评论中所指出的,MySQL不适合这样的任务。但是,如果您的消息表有点“不变”,您可以尝试替换这样的值:
SELECT
REPLACE(REPLACE(messages.message, '{0}', first_param.ParamValue),
'{1}', second_param.ParamValue)
FROM
messages LEFT JOIN params first_param ON (first_param.message_id = messages.id)
LEFT JOIN params second_param ON (second_param.message_id = messages.id)
但请注意,该解决方案仅适用于最多两个参数。
答案 1 :(得分:0)
下面的代码也可用于获得所需的结果。
;WITH CTE
AS
(
select Msgid,[0] as position0,[1] as position1
from
(
SELECT Msgid,paramvalue,position
FROM #tableB
)pv
pivot
(
max(paramvalue) FOR position IN ([0],[1])
)P
)
SELECT
REPLACE(REPLACE(om.Msg, '{0}', pm.position0),'{1}', pm.position1)
from #tableA om
left join CTE pm ON om.id = pm.Msgid