Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从MySQL列表中删除特定数字_Php_Mysql - Fatal编程技术网

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

Php 如何从MySQL列表中删除特定数字,php,mysql,Php,Mysql,我在MySQL条目“id\u user”中有一个逗号分隔的数字列表,如下所示: 127,130,150,12,4,7,8,9 在这个以逗号分隔的列表中找到一个数字的最佳方法是什么?如果是其他数字,1用逗号将其删除;如果该数字本身类似于: 127 然后更新MySQL条目 因此,如果我想从列表中删除150,它将在MySQL中更新为: 127,130,12,4,7,8,9 我希望避免尝试删除id“12”,但最终删除127或512等数字中的“12” 谢谢大家! 使用PHP: $array = ex

我在MySQL条目“id\u user”中有一个逗号分隔的数字列表,如下所示:

127,130,150,12,4,7,8,9
在这个以逗号分隔的列表中找到一个数字的最佳方法是什么?如果是其他数字,1用逗号将其删除;如果该数字本身类似于:

127
然后更新MySQL条目

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

127,130,12,4,7,8,9
我希望避免尝试删除id“12”,但最终删除127或512等数字中的“12”

谢谢大家!

使用PHP:

$array = explode(',', $string);
$pos = array_search('127', $array);
unset($array[$pos]);
$string = implode(',', $array);
或者使用MySQL:

REPLACE(column, '127,', '')
REGEX_REPLACE(column, '127$', '')
使用PHP获取UDF正则表达式替换为^127$

$array = explode(',', $string);
$pos = array_search('127', $array);
unset($array[$pos]);
$string = implode(',', $array);
或者使用MySQL:

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

Get-UDF REGEX_REPLACE-通过^127$

读取行之间的数据,我觉得您好像在将外键列表存储在逗号分隔的字符串字段中,以表示多对多关系。这不是一个好主意

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

例如,假设您有一个名为users的表,并且希望存储它们之间的朋友关系。你所做的是类似于此的注意事项。在我写结尾时,我意识到这其实不是一个很好的例子,但我现在仍坚持:

而更好的做法是:

使用者

朋友

要选择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
)

从字里行间看,我觉得您好像在将外键列表存储在逗号分隔的字符串字段中,以表示多对多关系。这不是一个好主意

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

例如,假设您有一个名为users的表,并且希望存储它们之间的朋友关系。你所做的是类似于此的注意事项。在我写结尾时,我意识到这其实不是一个很好的例子,但我现在仍坚持:

而更好的做法是:

使用者

朋友

要选择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
)
在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);
这应该行得通。

在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);
这应该行得通。

建议您在MySQL中试试

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

希望这对你有所帮助,不妨在MySQL中试试

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


希望这有帮助

如果数字是1270,它将取代它too@jcho360现在应该是这样,如果我没有在regex中出错,如果数字是1270,它将替换它too@jcho360现在,如果我没有在正则表达式中出错的话,它应该是通过超越问题,通过阅读字里行间的内容。尼斯:谢谢,我正在寻找一个关于如何规范化MySQL数据库的答案。作为MySQL的新手,我提出了一个快速的问题——在选择Dave的朋友时,u和f代表什么?u和f是表名别名。基本上,它们缩短了在联接查询中引用每个表的时间。您可以只编写SELECT users.*FROM FROM friends JOIN users.id=friends.FRIENDER WHERE friends.user=1上的用户,其含义相同。在某些情况下,你需要使用别名,但这不是其中之一,它们可能有点超出了这个问题的范围。尼斯:谢谢,我正在寻找一个关于如何规范化MySQL数据库的答案。作为MySQL的新手,我提出了一个快速的问题——在选择Dave的朋友时,u和f代表什么?u和f是表名别名。基本上,它们缩短了在联接查询中引用每个表的时间。您可以只编写SELECT users.*FROM FROM friends JOIN users.id=friends.FRIENDER WHERE friends.user=1上的用户,其含义相同。在某些情况下,您需要使用别名,但这不是其中之一,它们可能有点超出了本问题的范围。