SQL多个关键字模糊查询(同一字段中)如何让尽量多的关键字相匹配的搜索结果在前面?
SQL多个关键字模糊查询(同一字段中)如何让尽量多的关键字相匹配的搜索结果在前面?比如:关键字为"SQL查询匹配",则同时含有三个词的在前面(最好不分顺序),含其中两个的...
SQL多个关键字模糊查询(同一字段中)如何让尽量多的关键字相匹配的搜索结果在前面?
比如:关键字为"SQL 查询 匹配",则同时含有三个词的在前面(最好不分顺序),含其中两个的次之,最后为含其中一个词的。
请问SQL应该怎么写?(注意:多个关键字,不一定就是三个,也可能两个、四个、五个或更多)
语言:最好为.net(C#),其它也可。
谢谢。
对n个关键词求m个的组合,并赋值怎么做?没写出来。。。还请高手指教!! 展开
比如:关键字为"SQL 查询 匹配",则同时含有三个词的在前面(最好不分顺序),含其中两个的次之,最后为含其中一个词的。
请问SQL应该怎么写?(注意:多个关键字,不一定就是三个,也可能两个、四个、五个或更多)
语言:最好为.net(C#),其它也可。
谢谢。
对n个关键词求m个的组合,并赋值怎么做?没写出来。。。还请高手指教!! 展开
4个回答
展开全部
没时间做,给出一种方案:
1、初始化SqlCommand、SqlConnection,获取数据表至DataTable,查询多次,本地缓冲,效率高点。
2、关键字分割为一维字符串数组keys[],n个关键字,用两个函数求出1至n个关键词的全部组合,由于m个关键字的组合可能若干种,每种都是一个二维数组(每行是一个组合),所以存至三维交错数组,方法如下:
string[][][] allKeys=new string[n][][]();
void fun1()
{
for(int i=0;i<keys.Length;i++)
{
fun2(i);
}
}
void fun2(int m)
{
对n个关键词求m个的组合,自己编写,记得要初始化allKeys的第二、三维。
}
3、利用上述三维字符数组,从n到1个关键词的顺序,构造like子句(n 乘以 n中取m个组合数 个子句)。
4、定义DataTable的DataView,一次设置其RowFilter属性为上述有序的
like子句
***********************************************************
补充:
求固定位的组合。下面是一种用递归的做法:
int mt=m;
int k=n!/m!;//n中取m的组合数,不会再要求我写求n!的程序了吧?
allKeys[mt]=new string[k][]();
allKeys[mt][k]=new string[mt]();
以上是本问题必要的初始化。下面求n中取m的一个组合。
void combination(int n,int m)
{
int i;
for (i = n; i >= m; --i) {
allKeys[mt][k][m]=keys[i];
if (m > 0)
combination(i-1,m-1);
else
return;
}
}
1、初始化SqlCommand、SqlConnection,获取数据表至DataTable,查询多次,本地缓冲,效率高点。
2、关键字分割为一维字符串数组keys[],n个关键字,用两个函数求出1至n个关键词的全部组合,由于m个关键字的组合可能若干种,每种都是一个二维数组(每行是一个组合),所以存至三维交错数组,方法如下:
string[][][] allKeys=new string[n][][]();
void fun1()
{
for(int i=0;i<keys.Length;i++)
{
fun2(i);
}
}
void fun2(int m)
{
对n个关键词求m个的组合,自己编写,记得要初始化allKeys的第二、三维。
}
3、利用上述三维字符数组,从n到1个关键词的顺序,构造like子句(n 乘以 n中取m个组合数 个子句)。
4、定义DataTable的DataView,一次设置其RowFilter属性为上述有序的
like子句
***********************************************************
补充:
求固定位的组合。下面是一种用递归的做法:
int mt=m;
int k=n!/m!;//n中取m的组合数,不会再要求我写求n!的程序了吧?
allKeys[mt]=new string[k][]();
allKeys[mt][k]=new string[mt]();
以上是本问题必要的初始化。下面求n中取m的一个组合。
void combination(int n,int m)
{
int i;
for (i = n; i >= m; --i) {
allKeys[mt][k][m]=keys[i];
if (m > 0)
combination(i-1,m-1);
else
return;
}
}
展开全部
思路:
我的感觉是baidu、google是用的页面后台代码解析字符串,构造SQL语句条件部分,最后传递给底层与数据库连接的部分
用or like '%keyword%'来查询
规搜索引擎是关键字中无空格就构造where aa like '%keyword%'
有空格出现就对字符串拆分,构造语句,后面的全用or like '%keyword%'
LZ试试在baidu查询%是没有结果的
用诸如:%abc查出来的结果是忽略%号的
在SQL中用@name传参数的话,不许要对SQL关键字屏蔽,唯一的解释就是对字符串构造后组成的SQL语句
同时用这样的方法,对多参数的处理更容易
我的感觉是baidu、google是用的页面后台代码解析字符串,构造SQL语句条件部分,最后传递给底层与数据库连接的部分
用or like '%keyword%'来查询
规搜索引擎是关键字中无空格就构造where aa like '%keyword%'
有空格出现就对字符串拆分,构造语句,后面的全用or like '%keyword%'
LZ试试在baidu查询%是没有结果的
用诸如:%abc查出来的结果是忽略%号的
在SQL中用@name传参数的话,不许要对SQL关键字屏蔽,唯一的解释就是对字符串构造后组成的SQL语句
同时用这样的方法,对多参数的处理更容易
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的牛人,我一直认为多个条件的模糊查询,比如百度,谷歌等都是
都是直接查数据库,常用的在数据库中有视图呢。
都是直接查数据库,常用的在数据库中有视图呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |