Mysql 向字段中添加值

Mysql 向字段中添加值,mysql,Mysql,继承了一个20000图书数据库,其中有一个名为“关键字”的特定字段,这个字段非常混乱,位于一个名为books的巨大表中。 尝试为每个“关键字”字段预加一个值,该字段读取该字段中的单词,并用一个清晰的短语标识其确切类别 因此,寻找“古代”一词,并在“菜单古代”前面加上前缀 UPDATE books SET keywords=CONCAT('menu-ancient, ',keywords) where keywords like '%ancient%'; 这是可行的,但是下面的查询不能满足我的

继承了一个20000图书数据库,其中有一个名为“关键字”的特定字段,这个字段非常混乱,位于一个名为books的巨大表中。 尝试为每个“关键字”字段预加一个值,该字段读取该字段中的单词,并用一个清晰的短语标识其确切类别

因此,寻找“古代”一词,并在“菜单古代”前面加上前缀

UPDATE books SET keywords=CONCAT('menu-ancient, ',keywords) 
where keywords like '%ancient%';
这是可行的,但是下面的查询不能满足我的要求

它应该找到所有它刚刚完成的,并通过它们找到其中哪一个也有“中世纪”一词在那里-给子菜单古代中世纪以及

UPDATE books SET keywords=CONCAT('menu-ancient-medieval, ',keywords) 
where keywords = 'menu-ancient' AND keywords LIKE '%medieval%';
一个示例字段如下所示: 菜单:古代、战争、中世纪、古代和中世纪、古代到19世纪


我已经准备好了古老的菜单,但是没有中世纪的那一点

您可以使用find_in_set()函数来完成此操作

其工作原理如下例所示:

SELECT * from books where FIND_IN_SET('menu-ancient', keywords) > 0;
您可以将其应用于更新查询

UPDATE books 
SET keywords=CONCAT('menu-ancient-medieval, ',keywords)
where
  FIND_IN_SET('menu-ancient', keywords)
  AND keywords LIKE '%medieval%';

注意:我不太确定我是否正确理解了问题的第二部分。我想您可能必须更改查询,以便在where子句中使用子查询。

如果我理解您的解释,是否应该将其从
关键字='menu-agrage'
更改为
关键字,如'menu-agrage%'
?第一次更新工作正常,并正确插入新值'menu-agrage'。但是,当执行查询的下一行,即下一次更新时,它找不到单词“中世纪”。我确实尝试过类似的方法,结果是“菜单古代中世纪,菜单古代,菜单古代,菜单古代,NOISBN,布匿战争。罗马,古代和中世纪,古代到19世纪,我想知道尝试一个接一个地执行30个查询来构建子菜单是否太多了!平等比较(
=
运算符)不会将通过将
'menu-again'
前置而更新的任何行与现有值进行匹配。相等性比较只会匹配与指定字符串匹配的
关键字
列的值。添加到列值的逗号将导致相等性比较与
'menu-again'
要返回false。考虑使用<代码>类似< <代码> >比较或<代码> FordOnIn集合函数。第2部分意味着,如果关键字“古”存在,则预置菜单古旧。下一个查询称,如果关键字(现在)存在,关键字“中世纪”也存在,然后前置“菜单-古代-中世纪”我以为每个查询都会在数据库上运行。但是我现在认为所有查询都会在数据库上运行。它不会在每个查询后更新,以便下一个查询工作,但所有查询都会执行它们的操作,然后数据库会更新。我如何获得,w如果不在phpmyadmin中逐个输入,将完成80个查询。