用另一个

时间:2016-02-02 12:00:11

标签: sql database firebird

我有两个数据库表,其中一个我有一些消息(比如模板),在第二个我有消息中应该替换的值。

我会试着解释一下自己

在表A中我有类似的东西

  

Id - 消息

     

1 - “用户{0}已从{1}”

登录

在表B中我有类似的东西

  

Id - Id消息 - ParamValue - ParamPosition

     

1 - 1 - Hugo - 0

     

2 - 1 - 计算机A - 1

我想要的是一条形成的信息,如

  

用户Hugo已从计算机A登录

像c#中的string.format。

我怎么能这样做,无论参数多少,我该怎么做 消息有吗?

感谢您的帮助!

2 个答案:

答案 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)

即使表A中有多行,

下面的代码也可用于获得所需的结果。

;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