0

我在 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' 但最终删除了 127 或 512 等数字中的 '12'

谢谢!

4

4 回答 4

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

要选择 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
)
于 2012-06-11T18:14:56.390 回答
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

于 2012-06-11T18:04:28.517 回答
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);

那应该行得通。

于 2012-06-11T18:17:19.883 回答
0

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

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

使用UDF

希望这可以帮助

于 2012-06-11T18:28:44.223 回答