没时间做,给出一种方案:
1、初始化SqlCommand、SqlConnection,获取数据表至DataTable,查询多次,本地缓冲,效率高点。
2、关键字分割为一维字符串数组keys[],n个关键字,用两个函数求出1至n个关键词的全部组合,由于m个关键字的组合可能若干种,每种都是一个二维数组(每行是一个组合),所以存至三维交错数组,方法如下:
string[][][] allKeys=new string[n][][]();
void fun1()
{
for(int i=0;i<keysLength;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;
}
}
朋友的sql语句有问题,查询不到数据,绑定datagrid就要出错。like模糊查询没有问题,问题sql语句中空格问题语法错误,确保数据库已连接、修改如下试试
adohytzRecordSource = "select from tbOA_hyjl where 会议主题 like' %" & Text2Text & "% 'and 发布人='" + Mid(frm_mainBeforeStatusBar1Panels(5)Text, 5, Len(frm_mainBeforeStatusBar1Panels(5)Text) - 4) + "' order by 发布时间 desc"
建议将sql语句赋值后到查询分析器验证一下。
以下是测试代码:环境SQLSERVER2008
-----------------------------------------
CREATE TABLE [dbo][Table_1](
[DATA] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo][Table_1] ([DATA]) VALUES (N'QQ 2009')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'QQ2009')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'qq123')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'200912')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'123')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'233')
INSERT [dbo][Table_1] ([DATA]) VALUES (N'12')
GO
SELECT DATA
FROM Table_1
WHERE (DATA LIKE '%qq%') AND (DATA LIKE '%2009%')
---------------------------------------------------------
如果要求至少一个空格,请在qq后面或者在2009前面加一个空格
以上就是关于SQL多个关键字模糊查询(同一字段中)如何让尽量多的关键字相匹配的搜索结果在前面全部的内容,包括:SQL多个关键字模糊查询(同一字段中)如何让尽量多的关键字相匹配的搜索结果在前面、VB 使用“like”模糊查询的问题、sql语句模糊查询问题.单列多个条件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)