kphp企业站快速开发之关联字段查询方法:mysql的find_in_set()函数

昨天一个kphp团队的学员向我请教了一个关联字段查询的问题,这个同学在做一个企业网站,对于企业网站kphp开源框架已经帮助他完成了80%了,一些基本企业信息发布需求都能实现,而这位学员的客户想实现发布的新闻和企业的主营项目关联,可以实现一对多关联,即当网站的来访者点击到项目页时候,项目页的左侧会展示和项目关联的新闻,这样有利于来访者更好阅读项目和企业新闻,其实这个也很简单,只需要加个字段,运用mysql的find_in_set()就很容易搞定了。

第一,在新闻表中加一个关联字段
字段object_id_str为varchar类型因为企业站而且客户的项目也有限给500个字节就ok了,保存项目的id字符串如"123,21,32",添加新闻时候做个多选把项目展示出来,进行选择关联保存到数据库。

第二,数据库保存完毕,现在就需要查询关联,在项目页取得项目id和 新闻表中的object_id_str进行关联读取新闻信息。

首先想到的是like 查询。
like 模糊查询可以说能实现80%的查询需求,
但对于这个案例还是没有实现,原因字段中保存的项目id值直接有包含的,比如 id是 12,和121,当使用like查询 id为12时候,也会把 121的id值查出来,此方法行不通。当时开始想会不会有这样的函数,可以实现我的要求,功夫不负有心人,经过查找,找到了 mysql字符串函数find_in_set()函数
这个函数是以","为分隔符,而对每一项进行对比的,正好适合我的查询要求,分析一下就是通过项目id值与新闻表中的关联字段,即字项目id是字符串,
select * from news_info where find_in_set('1',object_id_str)。

特别注意:mysql字符串函数 find_in_set(条件字段/字符串,资源字段/字符串),函数是返回[资源字段/字符串]中[条件字段/字符串]所在的位置索引,[资源字段/字符串]必须以","分割开。如果你的关联栏目字段id字符串中id超出20个那建议不用find_in_set,那样效率会很低,因为这个项目是企业站,那么这个mysql的find_in_set()函数是非常好的选择。

原文转自kphp开源框架: http://www.kphp.org/?faq-show-48.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值