MySQL字符串格式化+条件语句

Posted

技术标签:

【中文标题】MySQL字符串格式化+条件语句【英文标题】:MySQL string formatting + conditional statements 【发布时间】:2011-05-09 00:29:21 【问题描述】:

我正在使用下面的查询从属性表中进行选择。问题是我需要一个基于条件的格式化字符串。

1.) 以字符串“Reply:”开头的字符串格式 2.) 在上面的字符串后面加上: 成帧路由 + 成帧 IP 或 Framed-IP 是路由未设置 或池提示

以下是我需要的示例..

示例:回复:Framed-IP="111.111.111.111" 示例 2:回复:PoolHint="8"

可以使用 mysql 条件语句吗?

编辑添加

如果 (attribute_name == 'Framed-Route') 回复=Framed-Route="value"; elseif (attribute_name == 'Framed-IP') 回复=Framed-IP="value" 否则回复 = PoolHint="value"

########### 输出
SELECT attribute_name, value
  FROM user_product_attribute upa, product_attribute pa
 WHERE upa.user_product_id IN

   (  SELECT upa.user_product_id
        FROM user_product_attribute upa, user_product up, product_attribute pa, product p
       WHERE pa.attribute_name = 'username'
         AND pa.product_attribute_id = upa.product_attribute_id
         AND pa.product_id = p.product_id

         AND up.status = 'active'
         AND p.product_name = 'product1'
         AND upa.value = 'joebogs' )

   AND upa.product_attribute_id = pa.product_attribute_id
########### 输出

属性名称值 成帧路由 111.111.111.111 帧 IP 地址 111.111.111.111 池提示 8 用户名 joeblogs 密码密码

【问题讨论】:

【参考方案1】:

如果我对问题的理解正确,您可以使用 MySQL CONCAT() 函数来执行此操作:

不使用 CONCAT:

mysql> SELECT attribute_name, value
    -> FROM user_product_attribute 
    -> WHERE attribute_name = 'Framed-IP-Address'\G

attribute_name: Framed-IP-Address
value: 111.111.111.111

使用 CONCAT 函数的类似查询:

mysql> SELECT attribute_name, 
    -> CONCAT('Reply: Framed-IP=',value) AS 'formatted_value'
    -> FROM user_product_attribute
    -> WHERE attribute_name = 'Framed-IP-Address'\G

attribute_name: Framed-IP-Address
formatted_value: Reply: Framed-IP=111.111.111.111

CONCAT 文档:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_concat

正如我所说,但不确定这是否是您需要的?

Lee- 进一步了解您的评论,这里有一个更新的查询。这个使用 CONCAT 和 IF:

mysql> SELECT attribute_name, 
    -> IF(attribute_name = 'Framed-Route', CONCAT('Reply=Framed-Route=',value),
    -> IF(attribute_name = 'Framed-IP', CONCAT('Reply=Framed-IP=',value), value))
    -> AS 'formatted_value'
    -> FROM user_product_attribute\G

*************************** 1. row ***************************
 attribute_name: Framed-Route
formatted_value: Reply=Framed-Route=111.111.111.111

*************************** 2. row ***************************
 attribute_name: Framed-IP
formatted_value: Reply=Framed-IP=111.111.111.111

在上面,如果 attribute_name 不是“Framed-Route”或“Framed-IP”,则返回值而不进行任何格式化。

【讨论】:

这是一个开始...不过我还需要以下内容.. If (attribute_name == 'Framed-Route') Reply=Framed-Route="value"; elseif (attribute_name == 'Framed-IP') 回复=Framed-IP="value"; NP - 已更新。请参阅我答案末尾的查询。 谢谢,它在正确的方向,但不完全在那里.. 我只需要返回一个值.. 所以如果帧 IP 存在,不要返回 poolhint.. 另外如果帧路由存在我需要浓缩Framed-IP 和 Framed-Route.. 当前查询为每一行返回一个格式化字符串。

以上是关于MySQL字符串格式化+条件语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之条件语句——条件测试

理论 : shell编程之条件语句————理论讲解

shell脚本——编程条件语句(条件测试if语句case分支语句)

条件测试和结构化语句

Shell编程之条件语句章

Shell脚本之条件语句