如何从列表MySQL中删除特定数字

时间:2012-06-11 18:01:07

标签: php mysql

我在MySQL条目'id_user'中有一个逗号分隔的数字列表,如下所示:

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

在这个以逗号分隔的列表中查找数字的最佳方法是什么?(1)如果它与其他数字一起用逗号删除它,或者(2)如果数字本身就是删除它自己:

127

然后更新MySQL条目。

因此,如果我想从列表中删除150,它将在MySQL中更新为:

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

我想避免尝试删除id'12',但最终删除了12位数字,如127或512

谢谢!

4 个答案:

答案 0 :(得分:4)

在行之间进行读取,听起来就像是在逗号分隔的字符串字段中存储外键列表以表示多对多关系。这不是一个好主意。

你应该做的是创建一个表来存储关系。

例如,假设您有一个名为users的表,并且您希望在它们之间存储朋友关系。你正在做的是这样的事情( N.B。我意识到这实际上不是一个很好的例子,因为我写了最后但我现在坚持它):

  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

要选择Dave的朋友,你可以做到

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

...并删除Dave和Bob之间的关系(你想在这里做什么),你可以简单地做到

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

答案 1 :(得分:1)

使用PHP:

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

或使用MySQL:

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

使用^ 127 $

获取UDF REGEX_REPLACE - https://launchpad.net/mysql-udf-regexp

答案 2 :(得分: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);

这应该有效。

答案 3 :(得分:0)

正如pyrate建议在MySQL中尝试这个

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

使用UDF

希望这有帮助