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字符串格式化+条件语句的主要内容,如果未能解决你的问题,请参考以下文章