2014-10-29 81 views
0

我有返回MYSQL选择之间“”多值

a:2:{i:0;s:10:"Properties";i:1;s:14:"Movable Assets";} 

一个专栏中,我想只返回:

Properties, Movable Assets 

如何使用SELECT语句检索值在“符号之间

+1

这将是相当困难的考虑的事实,格局可能不会在所有情况下相同。而在MySQL中,没有这样的爆炸功能来完成这项工作。最简单的事情就是使用应用程序层来处理这个问题。 – 2014-10-29 07:39:26

+0

我无法使用应用程序层,这是使用WordPress插件,它只接受SQL来输出报告 – 2014-10-30 09:55:47

回答

1

使用SUBSTRING_INDEX()

SUBSTRING_INDEX()需要一个字符串参数,后跟一个分隔符以及要返回的零件数量。在使用分隔符分割字符串之后,该部分数量将作为单个字符串返回。

select concat( 
    SUBSTRING_INDEX( 
     SUBSTRING_INDEX( 
      SUBSTRING_INDEX( 
       'a:2:{i:0;s:10:"Properties";i:1;s:14:"Movable Assets";}', 
       '"', 
       4 
      ), 
      '"', 
      2 
     ), 
     '"', 
     -1 
    ), 
    ",", 
    SUBSTRING_INDEX(
     SUBSTRING_INDEX( 
      SUBSTRING_INDEX(
       'a:2:{i:0;s:10:"Properties";i:1;s:14:"Movable Assets";}', 
       '"', 
       4 
      ), 
      '"', 
      4 
     ), 
     '"', 
     -1 
    ) 
); 
+0

谢谢,这只是工作,但我仍然有一个问题,对不起,我没有在原来的问题中提到它。还有条目“物业”和单独的“可动资产”。在使用上述答案时,这些答案将作为“属性,属性”和“可移动资产,可移动资产”返回。有没有解决的办法?我在此之前使用了一个case语句,但我无法过滤它。我试着添加一个AND entry_id ='Properties',然后entry_value else,对于'Movable Assets'也是一样,但是它们一直返回重复的结果 – 2014-10-30 09:45:24

+0

这里是CASE语句: MAX(field_id = 79 then case select select concat( SUBSTRING_INDEX SUBSTRING_INDEX( SUBSTRING_INDEX( entry_value, ' “',4 ) '”',2 ) '“', -1 ) ”,“, SUBSTRING_INDEX( SUBSTRING_INDEX ( SUBSTRING_INDEX( entry_value, ' “',4 ) '”',4 ) '“', -1 ) )) 端)作为InterestedIn, – 2014-10-30 09:47:18

+0

查看新问题HTTP ://堆栈溢出。COM /问题/ 26650251/MySQL的选择用字合带的标志 - 中之列的,杂乱的文字 – 2014-10-30 10:15:56

2

这些是序列化的值,你可以使用PHP来获得你想要的结果。

你可以使用,unserialize这将返回一个数组,然后你可以使用implode获得逗号分隔值。

example