在一些类似于文章博客的内容中,会用到模糊搜索检索多个字段,对于检索后的结果排序可能并不满意。
例如:
在CSDN搜索一篇博文,在输入关键字后会检索文章的标题,内容,分类,标签等内容,但是检索的排序结果可能不太理想,比如想优先显示标题中带有此关键字的文章,不管是按主键或者时间排序都是不行的。
下面我就简单的说明一下遇到这种问题的几种解决办法:
利用LOCATE函数(MySQL数据库),按照匹配度进行排序。
locate(subStr,string) 函数返回subStr在string中出现的位置,返回结果大于0代表着subStr出现的位置(从开始就存在则为1,即如果string中存在subStr最小值为1),如果等于0则说明subStr不存在。
检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据:
SELECT `name`,`memo`,locate('shx',`name`) as `order_name` FROM `cs_user` where `name` like "%shx%" or `memo` like "%shx%" order by `order_name` desc
检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据,如果`name`字段中'shx'信息出现的位置相同或者都不存在,即`order_name`为0时,则优先显示`memo`字段中存在'shx'信息并且出现位置靠前的数据:
SELECT `name`,`memo`,locate('shx',`name`) as `order_name`,locate('shx',`memo`) as `order_memo` FROM `cs_user`where `name` like "%shx%" or `memo` like "%shx%" order by `order_name` desc,`order_memo` desc
等待更新
mysqladmin --version 验证mysql
mysql -h主机地址 -u用户名 -p 连接mysql
show engines 查看数据库支持的引擎
show variables like '%storage_engine%' 查看当前使用的数据库引擎
MySQL每个数据库都会在data目录下生成一个目录,里面有*.frm、*.myi、*.myd和*.opt文件。
*.frm--表定义,是描述表结构的文件。
*.MYD--"D"数据信息文件,是表的数据文件。
*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树。
*.opt--记录数据库选项,数据库的字符集。
增:返回添加记录的id,删和修返回影响的条数,查返回查询出来的结果集。
MySQL数据库版本:
5.X:
5.0-5.1:早期产品的延续,升级维护
5.2-5.3:不常用
5.4-5.X:MySQL整合了三方公司的新存储引擎,以前的版本都是mysql自己单干。(现在主要是用5.5和5.7)
连接层:提供与客户端连接的服务
服务层:1.提供各种接口。2.提供SQL优化器:MySQL QUery Optimizer
引擎层:提供了各种存储数据的方式(InnoDB MyISAM)
存储层:存储数据
InnoDb:事务有限,适合高并发操作;行锁
MyISAM:性能优先