【问题标题】:MySQL string formatting + conditional statementsMySQL字符串格式化+条件语句
【发布时间】: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
密码密码

【问题讨论】:

    标签: mysql string attributes formatting conditional


    【解决方案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.. 当前查询为每一行返回一个格式化字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多