请教一个MySql 正则表达式查询的问题

cnidb 2008-07-02 05:53:28
比如表中有一个字段为title
内容假如如下:
--------------------------------
| id | title
--------------------------------
| 1 | 我是中国人,在中国的江苏省
--------------------------------
| 2 | 我是中国人,在上海市
--------------------------------
| 3 | 我是中国人,在北京
--------------------------------


查询的时候,可能按多个关键字:如"中国","北京"
需要将查询出来的结果,关键字和title中匹配度高的排到前面,不知道应该如何写这个查询呢?

...全文
94 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnidb 2008-07-04
  • 打赏
  • 举报
回复
想到如下方式来实现,
将title转为拼音,表中添加一个title_py字段;
然后将查询内容转为拼音,再我是中国人,再match against;
cnidb 2008-07-03
  • 打赏
  • 举报
回复
谢谢大家的回复

想过用lunce,不过目前是使用是php开发,改用lunce的话,可能需要全部重新写代码

不知道基于php+mysql有没有这方面的解决方案?
yangxiao_jiang 2008-07-03
  • 打赏
  • 举报
回复
wwwwb,你的方法有个问题,如果都是按照“中国","北京"这种两个字的,你的是对的,如果有"中国","北京","大幅度萨迪斯第三"这样的,就不对了,两个“北京”也没有一个"大幅度萨迪斯第三"长。

这种问题,还是用外部文件处理能比较好,比如java的lunce.
wwwwb 2008-07-03
  • 打赏
  • 举报
回复
思路:
用REPLACE函数将字段要查找内容替换为空,用LEN(原字段长度)-LEN(替换后字段长度)
即可得到有多少内容是匹配的
yangxiao_jiang 2008-07-03
  • 打赏
  • 举报
回复
我有个想法,不过应该是效率很差的。

就是你可以先用一个条件检索,然后union all下一个条件的,在union all
下一个条件的,然后按照相同记录的个数进行排序。

select id,title,count(*) as con from (
select id,title from table where title ...
union all
select id, title form table where ....
union all
.....
) as temp group by id ,title order by con
类似上面的写法。
yifuzhiming 2008-07-02
  • 打赏
  • 举报
回复
学习
wildlily980 2008-07-02
  • 打赏
  • 举报
回复
实话说,mysql不适合做你的功能.
如果你非要这样的话,可以试试match against全文搜索.不过据说中文的不行.
WWWWA 2008-07-02
  • 打赏
  • 举报
回复
用你的数据,正确结果贴出来看看

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧