mysql根据多个表更新一个表的mysql更新多个字段段

1355人阅读
&MySQL模糊查询是我们经常会遇到的,下面就为您介绍模糊查询的实现方法,希望对您学习MySQL模糊查询方面能够有所帮助。
在最近的一个项目需要实现在单表中对多字段进行多个关键字的MySQL模糊查询,但这数个关键字并不一定都存在于某个字段
例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。
可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:
在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。
在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。
因此,前文的MySQL模糊查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:238692次
积分:4035
积分:4035
排名:第2944名
原创:148篇
转载:125篇
评论:18条
(7)(3)(7)(9)(2)(5)(2)(7)(8)(7)(4)(5)(1)(3)(4)(6)(7)(4)(1)(3)(8)(1)(1)(3)(3)(3)(14)(10)(16)(15)(5)(19)(26)(12)(1)(15)(13)(12)(1)您现在的位置: &
MySQL字符串处理之一个字段包含多个ID的解决
MySQL字符串处理之一个字段包含多个ID的解决
  如果在MySQL中一个表中存着一个字段包含多个Id,应该如何处理呢,下面就为您介绍这种MySQL字符串问题的处理方法,希望对您学习MySQL字符串方面能有所帮助。
  1、新建表
  drop&table&if&exists&C &  create&table&Category &  ( &  &&&&cateId&&&&&&&&&&&&&&&&&&&&&&&&&int(5)&&&&&&&&&&&&&&&&&&&&&&&&&not&null&AUTO_INCREMENT, &  &&&&chiName&&&&&&&&&&&&&&&&&&&&&&&&varchar(80), &  &&&primary&key&(cateId) &  ); &  drop&table&if&exists&OpenR &  create&table&OpenRecord &  ( &  &&&&opreId&&&&&&&&&&&&&&&&&&&&&&&&&int(5)&&&&&&&&&&&&&&&&&&&&&&&&&not&null&AUTO_INCREMENT, &  &&&&cateIds&&&&&&&&&&&&&&&&&&&&&&&&varchar(80), &  &&&primary&key&(opreId)&&&&&&&&&&&&&&&&&&&& &  ); &
  2、初始化数据
  insert&Category(chiName)&values&('fish'),('shrimp'),('crab'),('tiger'); &  insert&OpenRecord(cateIds)&values('1,2'); &  insert&OpenRecord(cateIds)&values('2,3'); &
  3、查询OpenRecord中Id为1包括的Category。
  #错误的方法
  select&*& &  &&&&from&Category &  &&&&where&(select&INSTR(cateIds,cateId)&from&OpenRecord&where&opreId=1)&
  #正确的方法
  select&*& &  &&&&from&Category &  &&&&where&(select&FIND_IN_SET(cateId,cateIds)&from&OpenRecord&where&opreId=1)&
  用INSTR会出现当ID大于10的时候,查ID为1的数据,会把1,10,11,12......的都拿出来。
  4、扩展会出现的问题。  用FIND_IN_SET可以解决ID是用&,&号隔开的问题。然而会有另外的两种情况。
  A、当ID不包含&,&,但是用别的符号分开时,如用&|&。我们有如下的解决办法
  select&*& &  &&&&from&Category &  &&&&where&(select&FIND_IN_SET(cateId,REPLACE(cateIds,'|',','))&from&OpenRecord&where&opreId=1) &
  以上就是该MySQL字符串问题的处理方法。
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-有表product_attr,表product_attr_dict两张表。
product_attr中的property_one_id和property_two_id都对应product_attr_dict中的product_attr_dict_id,怎样查询能把查询结果合成一条记录?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
select property_one_id,property_two_id from product_attr Where product_attr_dict_id = 'xxxxx'
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (4520) 次锁定老帖子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
等级: 初级会员
来自: 上海
发表时间:&&
觉得这个问题比较有趣,发出来给有用的人参考:
/*Column Information For - test.tt*/
------------------------------------
Field&& Type&&&& Collation& Null&&& Key&&&& Default& Extra&& Privileges&&&&&&&&&&&&&&&&&&&&&& Comment
------& -------& ---------& ------& ------& -------& ------& -------------------------------& -------
id&&&&& int(11)& (NULL)&&&& YES&&&&&&&&&&&& (NULL)&&&&&&&&&& select,insert,update,references&&&&&&&&
value&& int(11)& (NULL)&&&& YES&&&&&&&&&&&& (NULL)&&&&&&&&&& select,insert,update,references&&&&&&
select a.id, a.value - b.value as diff from
(select id ,value, @num := @num + 1 as row_number from (SELECT @num:=0) r,tt order by id) a,
(select id ,value, @num2 := @num2 + 1 as row_number from (SELECT @num2:=0) r2, tt order by id) b
where a.row_number + 1 = b.row_
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术

我要回帖

更多关于 mysql更新多个字段 的文章

 

随机推荐