注册 登录
编程论坛 ASP.NET技术论坛

[求助]一段的智能的查询代码

垃圾的沉默 发布于 2007-06-25 16:32, 1428 次点击

数据库query.mdb 表:query 列: title
如何实现像类似百度一样的站内查询
如:
输入ABCD
如何得到A,AB,BC,CD,ABC,BCD,ABCD
sql语句怎么写?
能给个算法..或者是代码

[此贴子已经被作者于2007-6-25 16:37:53编辑过]

17 回复
#2
bygg2007-06-25 16:36
将输入的字符串变成数据,现在每个字符中间加上 %  ,再用模糊查询.
#3
垃圾的沉默2007-06-25 16:42

就是说转成a,b,c,d,四个字符..然后再串起来,在他们中字加上%
是这样吗??

#4
垃圾的沉默2007-06-25 17:07

能给段通过的代码吗??
我还是有点迷糊...如果用户输入比较长的.那又怎么转换..

#5
bygg2007-06-25 17:10
string QurStr=this.TextBox1.Text.Trim();
string Ss="";
int intLen = QurStr.Length;
for( int i = 0 ; i < intLen ; i++ )
{
Ss += QurSre[i].ToString() + "\%";
}

string sqlstr = "select * from tablename where title like '%" + Ss + "'";
.....
....
.....

[此贴子已经被作者于2007-6-29 9:34:43编辑过]

#6
bygg2007-06-25 17:11
不过这样的话,AD,BD,AC这样的也能被查出来的.呵呵.改一下就可以实现
#7
cyyu_ryh2007-06-25 18:10
模式匹配的话,应该都可一查询出来,无可非议
#8
垃圾的沉默2007-06-27 10:50

谢版主,,,明白了..
公司今天给我的要求是得像百度和GOOGLE那里的功能..我真的昏了..
如果我在
for(int 1=0;i<intlen;i+=1;)
结果跟for(int 1=0; i<intlen;i++)
有什么区别

#9
冰彩虹2007-06-28 12:26
如果我在
for(int 1=0;i<intlen;i+=1;)
结果跟for(int 1=0; i<intlen;i++)
有什么区别


没区别
#10
cyyu_ryh2007-06-28 12:50

没区别吧

#11
bygg2007-06-28 15:05

是没区别.都是实现的i加1..一般都是用i++.习惯和规范吧..

#12
垃圾的沉默2007-06-28 16:20

public void sq_click(Object sender , EventArgs e)
{
string QurStr =this.TextBox1.Text.Trim();
string Ss = "";
int intLen =QurStr.Length();
for (int i = 0; i < intLen; i++)
{
Ss += QurStr[i].ToString + "%";
}

string sql = "select * from tablename where title like '%" + Ss + "'";

OleDbConnection cnn = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("./database/query.mdb"));
OleDbDataAdapter cmd = new OleDbDataAdapter(sql, cnn);
DataSet dt = new DataSet();
cmd.fill(dt);
repeater1.Datasource = dt;
repeater1.dataBind();
cnn.close();

编译器错误信息: CS0118: “string.Length”是“属性”,但此处被当做“方法”来使用

源错误:

行 12: string QurStr =this.TextBox1.Text.Trim();
行 13: string Ss = "";
行 14: int intLen = QurStr.Length();
行 15: for (int i = 0; i < intLen; i++)
行 16: {


帮我看一下为什么会出错哦。。我弄不太明白。。C++的用法跟这个还是有点差别

[此贴子已经被作者于2007-6-28 17:04:12编辑过]

#13
bygg2007-06-29 09:32
呵呵,直接Length..是我写错了
#14
CrazyWeed09072007-06-29 10:00
select * from tablename where title like "%[Querystring]%"
#15
垃圾的沉默2007-06-29 14:02
谢版主..终于搞定了...剩下的就是显示方面的问题了....
发现C#跟C++还是有很多地方不一样的哦
#16
冰残剑2007-07-06 18:45
这样那里行得通。百度的查询结果是有分先后顺序的。
比如拿 ABCD 来说,他查询出来的结果是这样的:
1、含有 ABCD
2、含有ABC
3、...
.
.
.
这排序才是主要问题
#17
botailang2007-07-07 09:38
楼上说的在理
#18
垃圾的沉默2007-07-07 16:59
string QurStr=this.TextBox1.Text.Trim();
string Ss="";
string Sc=""
int intLen = QurStr.Length;
for( int i = 0 ; i < intLen ; i++ )
{
Ss += QurSre[i].ToString() + "%";
}
for (int j=0;i<intLen;i++)
{
Sc="and like" + QurStr[j].ToString()+ "%"
string sqlstr = "select * from tablename where title like '%" + Ss + "'" + Sc ;
我的想法是.用i把全部的字符查一遍.然后用j把字符组合成各个词组...
我知道有更好的办法..但对像百度那里的搜索引擎没有研究过..如果有谁研究过的话把心得说一下可以吗??
还有这个排序问题.
还有数据海量查询的查询方式是怎么样的....高手...吱个声
1