2014-03-14 48 views
2

我有一個MySQL表像Mysql的從行刪除重複的和更新的行

+-----------------+---------------------------------------------------------------+---------+ 
| col_key   |member_column             | weight | 
+-----------------+---------------------------------------------------------------+---------+ 
| 4:20131205:0922 | 018210020504;4.1672|018210020504;4.1672      | 8.3344 | 
| 4:20131204:0923 | 015819070006;13.8584|015819070006;13.8584      | 27.7168 | 
| 4:20131202:0922 | 018710040303;8.7864           | 8.7864 | 
| 4:20131204:0923 | 017319010003;2.7044|017319010004;2.7044      | 5.4088 | 
| 4:20131202:0922 | 055320020104;7.3357           | 7.3357 | 
| 4:20131217:0922 | 019120020404;7.8727|019120020404;7.8727      | 15.7454 | 
| 4:20131223:0923 | 011820010203;11.5213           | 11.5213 | 
| 4:20131216:0925 | 018320010403;13.7416           | 13.7416 | 
| 4:20131217:0922 | 017420020205;6.7384           | 6.7384 | 
| 4:20131217:0922 | 019723010104;4.3660|050122010004;12.1407|050122010003;12.1407 | 28.6474 | 
| 4:20131224:0926 | 022923040107;10.2461|022923040106;10.2461      | 20.4922 | 
| 4:20131216:0925 | 050122010004;12.1407|050122010003;12.1407      | 24.2814 | 
| 4:20131216:0925 | 061020030007;3.8048           | 3.8048 | 
+-----------------+---------------------------------------------------------------+---------+ 

這裏member_columns有不同的價值觀成員:重量,這是|分離。重量欄在特定行中具有成員的總重量。

我們需要從member_columns中刪除重複的成員並相應地更新權重。 例如:

row with col_key 4:20131205:0922 has member_column其中成員重複。 我需要這個欄目更新

4:20131205:0922 | 018210020504;4.1672 | 4.1672 

同樣的列

4:20131217:0922 | 019723010104;4.3660|050122010004;12.1407|050122010003;12.1407|28.6474 

我需要它來進行更新

4:20131217:0922 | 019723010104;4.3660|050122010004;12.1407|16.5067 

我一直在尋找對光標的解決方案,但得知遊標不更新實際數據。

請幫助。

+5

如果您需要在您的分隔符分隔列表獨立價值的工作,然後將其存儲這樣的方式是壞主意。所以第一步是:規範化你的數據。如果您需要使用單獨的值 - 獨立table_中的_store值。您不應該嘗試在DBMS中解決這種字符串操作。如果改變結構是不可能的,然後使用應用 –

+2

作爲一個方面說明,當查詢的很大一部分是字符串操作以獲取要查詢的實際數據時,這表示數據庫設計未正確完成。數據庫無法以有效的方式執行此查詢。 –

+1

爲什麼你不能在光標內更新?只需將ID保存到變量中並執行更新即可。在一般餐桌設計上,我同意ALma Do和Joachim將價值分成單列。 – solick

回答

0

對於這種方法,您需要從任何服務器端腳本獲得幫助。因此,要遵循的過程會是

1)選擇所有的行具有member_column如從表中通過所選

2)的任何條件縮小你的結果集字段迭代結果集

3)爆炸member_column字段由「|」並形成一個字符串數組。其將作爲 陣列(「4:20131217:0922」,「019723010104; 4.3660」,「050122010004; 12.1407」,「16.5067」);

4)貴公司的所有計算並刪除重複

5)一旦你有一個獨特的陣列,爆回用破折號「|」

6)將行更新回來。

希望它能幫助:)