2012-06-11 92 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個選項。 。 。 –