MySQL форматирование строки + условные операторы - PullRequest
2 голосов
/ 12 ноября 2010

Я выбираю из таблицы атрибутов запрос ниже. Проблема в том, что мне требуется отформатированная строка, основанная на условии.

1.) Строка, отформатированная, начиная со строки «Ответить:»2.) Следуйте приведенной выше строке с помощью:Framed-Route + Framed-IPили Framed-IP - маршрут не установленили Pool-Hint

Ниже приведен пример того, что мне нужно ..

Пример: Ответ: Framed-IP = "111.111.111.111"Пример 2: Ответ: PoolHint = "8"

Можно ли использовать для этого условные операторы MySQL?

Редактировать дополнение

If (attribute_name == 'Framed-Route') Reply = Framed-Route = "value";elseif (attribute_name == 'Framed-IP') Reply = Framed-IP = "value" else Reply = 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
########### Вывод

значение атрибута_имяFramed-Route 111.111.111.111Обрамленный IP-адрес 111.111.111.111PoolHint 8имя пользователя joeblogsпароль пароль

1 Ответ

0 голосов
/ 12 ноября 2010

Если я правильно понял вопрос, вы можете использовать функцию 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 doc: http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_concat

Как я уже сказал, не уверен, что это то, что вам нужно?

Ли - в дополнение к вашему комментарию, вот обновленныйзапрос.Этот использует 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

В приведенном выше примере, если имя-атрибута отличается от «Framed-Route» или «Framed-IP», значение возвращается без какого-либо форматирования.

...