2012-06-11 84 views
0

我有像這樣一個MySQL入門「id_user」逗號分隔的數字清單:如何從列表中的MySQL刪除特定數字

127,130,150,12,4,7,8,9 

什麼是找到這個逗號分隔的一些最好的辦法

127 

然後更新MySQL的條目:表和(1)用逗號,如果是與其他數字或(2)只是刪除自身,如果數字是本身喜歡將其刪除。

所以,如果我想從列表中刪除150,它會在MySQL更新爲:

127,130,12,4,7,8,9 

我想避免試圖刪除ID爲「12」,但最終卻取消了「12的數字如127或512

謝謝!

回答

4

閱讀,這聽起來像你對我是將外鍵列表存儲在逗號分隔的字符串字段中以表示多對多關係。這不是一個好主意。

你應該做的是創建一個表來存儲關係。

例如,假設您有一張名爲users的表,並且您想要在它們之間存儲朋友關係。你在做什麼是這樣的(注:我意識到這其實不是一個很好的例子,因爲我寫的結束,但我與它堅持現在):

id | name | friends 
------+--------+----------- 
    1 | Dave | 2,4 
    2 | Bob | 1 
    3 | Tom | 4 
    4 | Bill | 1,3 

而什麼更好的做法做的是這樣的:

users

id | name 
------+-------- 
    1 | Dave 
    2 | Bob 
    3 | Tom  
    4 | Bill 

friends

id | user | friend 
------+--------+---------- 
    1 | 1 | 2 
    2 | 1 | 4 
    3 | 2 | 1 
    4 | 3 | 4 
    5 | 4 | 1 
    6 | 4 | 3 

要選擇戴維的朋友,你可以做

SELECT u.* 
FROM friends f 
JOIN users u ON u.id = f.friend 
WHERE f.user = 1 

...並刪除戴維和鮑勃(你想在這裏做什麼)之間的關係,你可以簡單地做

DELETE FROM friends 
WHERE (
    user = 1 AND friend = 2 
) OR (
    user = 2 AND friend = 1 
) 
+0

+'超越了這個問題,通過閱讀之間的線條。尼斯:) – Zuul

+0

謝謝,我正在尋找如何規範化MySQL數據庫的答案。快速提問,因爲我是MySQL的新手 - 在選擇Dave的朋友時,你和你的意思是什麼? –

+0

'u'和'f'是表名別名。基本上,它們會縮短引用'JOIN'ed查詢中的每個表。你可以只寫'SELECT users。* FROM friends JOIN users ON users.id = friends.friend WHERE friends.user = 1',這意味着同樣的事情。有些情況下你需要*使用別名,但這不是其中的一種,它們可能超出了這個問題的範圍。 – DaveRandom

1

使用PHP:

$array = explode(',', $string); 
$pos = array_search('127', $array); 
unset($array[$pos]); 
$string = implode(',', $array); 

或者使用MySQL:

REPLACE(column, '127,', '') 
REGEX_REPLACE(column, '127$', '') 

獲取UDF REGEX_REPLACE - https://launchpad.net/mysql-udf-regexp與^ 127 $

字裏行間
+0

如果最後的數字是127它不會工作 – jcho360

+0

,如果數字是1270它將取代它嘗試這種在MySQL

TRIM(BOTH ',' FROM REGEX_REPLACE(column, '127\,?', '')) 

太 – jcho360

+0

@ jcho360你是對的。更新。現在它會。哦,等等,不是爲1270 ... –

0

在PHP:

$string="," . $string . ","; 
str_replace("127,", "", $string); 

或者你可以分割字符串:

$list=explode(",",$string); 
$new=""; 
foreach($list as $item){ 
    if($item!="127"){ 
     $new.=$item.","; 
    } 
$new=substr_replace($new ,"",-1); 

這應該工作。

0

由於pyrate建議使用UDF

希望這有助於

相關問題