2 oqcri oqcri 于 2016.09.26 19:46 提问

MySQL中如何实现字段值模糊匹配关键字 10C

打算做一张表。字段名分别是name,keyword1,keyword2,keyword3,info。
举个例子,比如
name中要填写的是“校外学生办理旁听选课须知”
keyword1:校外
keyword2:旁听
keyword3:选课
info里填写办事流程。

我想达到的效果是,当输入所要办理的事务描述时,根据关键字就能查询到相关信息。
比如我不是严格的输入“校外学生办理选课须知”,就输了个“校外旁听”,然后根据输入内容中有相应的关键字,因此这条“校外学生办理选课须知”的数据也能被查找出来。

写了诸如这样的语句:
SELECT * FROM table WHERE ('%' + keyword1 +'%') LIKE '校外旁听';
但显然是不通过的。。。所以希望能够给予一点思路或指导。

新人致谢!

6个回答

u014724906
u014724906   2016.09.26 20:01

我建议如果数据量不大的话,你把表里面内容全部拿出来,然后用其他代码处理,你这情况用的很生硬啊,sql不擅长这个的

oqcri
oqcri 比如用什么代码呢?
大约一年之前 回复
beBESTed
beBESTed   2016.09.26 20:06

提一点我觉得可能有帮助的意见:
首先,不同列中keyword可以相同,所以查到的结果一定要用集合接收
其次,你可以根据不同的要求给返回的结合一个顺序
最后,行转列,将所有的keyword转到一列,然后用该列进行匹配

YOKC311
YOKC311   2016.09.26 20:27

哈哈我也忘记了,好久没接触mySQL,好像有个什么类似于拼集的代码,还是什么的,,(第一个字段模糊查询的结果)拼上(第二个字段的模糊查询结果) 拼上(第三个字段的模糊查询结果),这样就不会有重复值。而且能查出来。图片说明哈哈哈

u013855736
u013855736   2016.09.26 21:58
$sql = "select orders.*, shop.*, orderstat.*, type.* 
      from orders, shop, orderstat, type 
      where concat (shop.shop_name, '-', orders.price, '-', orderstat.orderstat_name, '-', type.type_name)
      like '%".$val."%' and orders.orderstat_id=orderstat.orderstat_id 
      and shop.shop_id=orders.shop_id and type.type_id=orders.type_id";

之前写的,希望可以对你有用

u012930316
u012930316   2016.09.27 11:21

SELECT * FROM table WHERE name LIKE '%校%' or name like '%外%' or name like '%旁%' or name like '%听%' ...你这个确实不是很适合用mysql...也没必要建这个多字段吧...

ios_king
ios_king   2016.09.27 11:37

sql 是可以写正则的,如果你 输出的查询字符串在 name 属性中都存在 那条记录就是了,不过我的意见跟上面一样,sql 支持正则也比较弱,可以在非
db 端写,就尽量还是不要在db 端做这些匹配。

Csdn user default icon
上传中...
上传图片
插入图片