我在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
谢谢!
从字里行间读到,在我看来,您正在将外键列表存储在逗号分隔的字符串字段中以表示多对多关系。这不是一个好主意。
相反,您应该做的是创建一个表来存储关系。
例如,假设您有一个名为 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
)
使用 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$
在 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);
这应该行得通。
正如 pyrate 建议的那样,在 MySQL 中尝试一下
TRIM(BOTH ',' FROM REGEX_REPLACE(column, '127,?', ''))
使用 UDF
希望这有帮助