Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Sql_Regex_String - Fatal编程技术网

Php 从多行字段中删除一行(如果它在MySQL中包含单词)

Php 从多行字段中删除一行(如果它在MySQL中包含单词),php,mysql,sql,regex,string,Php,Mysql,Sql,Regex,String,我在MySQL表中有一个文本字段,填充方式如下: ID TEXT 1 horse cat cow 2 zebra 3 pig goat dog 如果文本字段包含单词cat,我需要删除该行。我怎样才能做到这一点呢?这并不像看上去那么容易。有几种可能的情况: 'CAT'可以出现在文本的中间,或者在文本的开始或结尾。它也可能单独出现在文本中 幸运的是,您正在运行MySQL 8.0,因此我们可以使用re

我在MySQL表中有一个文本字段,填充方式如下:

ID     TEXT
1      horse
       cat
       cow

2      zebra

3      pig
       goat
       dog


如果文本字段包含单词cat,我需要删除该行。我怎样才能做到这一点呢?

这并不像看上去那么容易。有几种可能的情况:<代码> 'CAT'可以出现在文本的中间,或者在文本的开始或结尾。它也可能单独出现在文本中

幸运的是,您正在运行MySQL 8.0,因此我们可以使用
regexp\u replace()
。我建议两个通行证,如下所示:

select id, regexp_replace(
    regexp_replace(text, '(\n|^)cat(\n|$)', '\n'),
    '^\n|\n$', 
    ''
) new_text
from mytable t
这应该妥善处理所有情况。假设以下样本数据:

查询返回:

旁注:如果需要,您可以将其转换为
update
语句

update mytable 
set text = 
    regexp_replace(
        regexp_replace(text, '(\n|^)cat(\n|$)', '\n'),
        '^\n|\n$', 
        ''
    )

理想情况下,您可以对其进行规范化,这样一来,您就不会在一列中存储多个值。如果您尝试过任何方法,您能告诉我们吗?这可能会让你更容易理解你到底想做什么。这个问题在目前的状态下是很不清楚的。@GrumpyCrouton嗯,我认为它很简单。我正在使用一种文本字段格式来存储多行。如果我需要从字段中删除某一行,我应该使用什么查询?@Steven你是说“文本字段”是指它在数据库中的存储方式,还是在网页上的显示方式?我不清楚你所说的“从字段中删除某一行”是什么意思,因为我不知道第一个问题的答案。@GrumpyCrouton数据库中的数据就是这样存储的。谢谢!它几乎起作用了。由于某些原因,当字段中只有一行带有
cat
时,它不会更新该字段。也许我可以使用PHP来帮助我完成这项任务?