2012-06-11 90 views
0

我有一列,我想创建一个查询以包含多个列。将数据拆分为mysql中的列

例如,我有测试列。

此列的数据是这样的:

record1 => **option1|value1;option2|value2** 
record2 => **option3|value3** 
record3 => **option3|value3;option1|value1;option2|value2;option4|value4** 

的选项和值的数量是不确定的。

我想有这样一个测试柱打入这样的选项的数量:

option1 option2 option3 option4 
'value1' 'value2' 'value3' 
        'value3' 
'value1' 'value2' 'value3' 'value4' 

我的表是这样的:

id name options 
    1 name age|12;color|red;active|yes;car|no 
    2 name age|15;member|yes 

谢谢!

+0

是否有一个原因,你实际上不能将值存储为单独的列? – cdhowie

+0

你的问题是如何将表中的一列中的数据移动到该表中的多列,或者是你的问题如何创建一个具有多列的表?另外,你可以分享你的表格模式吗? –

+0

是的,我的db被定义为这样,并且它有很多的entery.and这个方法的系统编程。 –

回答

1

您可以编写一个custom MySQL function called user defined function,它可以接收变量名称和要搜索的值,然后根据需要返回行或ID等。

在该函数中,您需要遍历只读游标中的所有行,并使用SUBSTRING_INDEX()分别获取值并检查匹配。

如果您需要进一步的帮助,请告诉我。

欲了解更多信息请查看MySQL手册string functions here

从上面的链接,用户评论提取物可以帮助你写的函数: 这将分裂的IP地址(“ABCD”)到4个各字节:

SELECT 
`ip` , 
SUBSTRING_INDEX(`ip` , '.', 1) AS a, 
SUBSTRING_INDEX(SUBSTRING_INDEX(`ip` , '.', 2),'.',-1) AS b, 
SUBSTRING_INDEX(SUBSTRING_INDEX(`ip` , '.', -2),'.',1) AS c, 
SUBSTRING_INDEX(`ip` , '.', -1) AS d 
FROM log_table 
+0

tnx somnath.but我不khow我有多少块,在ip地址中有4块,但在我的表中可能有10个选项。 。 。 –