请问谁知道对sql进行二次检索是如何实现的?

红楼梦魇 2001-12-21 05:37:21
请问谁知道对sql数据库中的表进行二次检索是如何实现的,就像有些网站上的搜索引擎提供的二次检索。
...全文
456 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
game4cn 2001-12-29
  • 打赏
  • 举报
回复
关注
playmud 2001-12-29
  • 打赏
  • 举报
回复
解决慢的问题有很多别的方法呀!
你说二次搜索怎么办?自己开发组件呀,把第一次的搜索出来的东西,放到临时空间,
就像中间层里的缓冲区,然后再搜索。
不懂,欧也不知道。瞎说。
红楼梦魇 2001-12-29
  • 打赏
  • 举报
回复
filter功能太弱了。
比如我用全文检索就不行。
红楼梦魇 2001-12-27
  • 打赏
  • 举报
回复
filter还是有问题。
唔,我尝试了许多方法后,竟然发现直接拼sql语句是效率最高的。
我现在将每种检索的sql语句的格式做得比较统一,拼起来还是蛮方便的。
但总觉得不太professional。大家还有什么好法子可以说说。
julyclyde 2001-12-25
  • 打赏
  • 举报
回复
Filter拼接一下,总比每次查询数据库要快多了。因为有缓冲区嘛。
jsidiot 2001-12-25
  • 打赏
  • 举报
回复
不错
我又知道了
红楼梦魇 2001-12-25
  • 打赏
  • 举报
回复
lazywolf兄,你的想法很好,不过,呵呵,有些一厢情愿啊。
Clyde兄,谢谢说了这么多,不过我是要实现二次检索耶,二次检索可不是检索两次,呵呵,需要不停的检索下去。是不是要将每次过滤的条件保存起来,然后拼成这次的。这样和直接拼检索的sql语句没什么区别咯。不知这个问题如何解决?
拼sql语句,麻烦,傻。
用临时表,每次检索都要向数据库写表,慢。
唔,专业网站的二次检索是怎么做的呀?应该有好些的办法吧。sign
julyclyde 2001-12-24
  • 打赏
  • 举报
回复
Filter 属性


为 Recordset 中的数据指定筛选条件。

设置和返回值

设置或返回变体型值,该值包含以下某项内容:

条件字符串 — 由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。


书签数组 — 指向 Recordset 对象中记录的唯一书签值数组。


以下某个 FilterGroupEnum 值。常数 说明
AdFilterNone 删除当前筛选条件并恢复查看的所有记录。
AdFilterPendingRecords 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。
AdFilterAffectedRecords 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。
AdFilterFetchedRecords 允许查看当前缓冲区中的记录,即上一次从数据库中检索记录的调用结果。
AdFilterConflictingRecords 允许查看在上一次批更新中失败的记录。


说明

使用 Filter 属性可选择性地屏蔽 Recordset 对象中的记录,已筛选的 Recordset 将成为当前游标。这将影响基于当前游标返回值的其他属性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount,因为将 Filter 属性设置为特定值可将当前记录移动到满足新值的第一个记录。

条件字符串由 FieldName-Operator-Value 格式(如“LastName = 'Smith'”)的子句组成。可以创建用单独的 AND(如“LastName = 'Smith' AND FirstName = 'John'”)或 OR(如“LastName = 'Smith' OR LastName = 'Jones'”)子句连接而成的混合子句。对于条件字符串请遵循以下规则:

FieldName 必须为 Recordset 中的有效字段名。如果字段名包含空格,必须用方括号将字段名括起来。


Operator 必须使用的操作符为:<、>、<=、>=、<>、= 或 LIKE。


Value 是用于与字段值(如 'Smith'、#8/24/95#、12.345 或 $50.00)进行比较的值。字符串使用单引号而日期使用井号 (#),对于数字,可以使用小数点、货币符号和科学记数法。如果 Operator 为 LIKE,Value 则可使用通配符。只允许使用星号 (*) 和百分号 (%) 通配符,而且必须为字符串的尾字符。Value 不可为 Null。


AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

与之相反,可以构造如下形式的筛选:
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。
通过仅允许查看(例如)上次调用 UpdateBatch 方法时受到影响的记录,筛选常量使得在批更新模式时所发生的单个记录冲突更易于解决。

设置 Filter 属性本身可能会因与基本数据发生冲突(如某记录已被其他用户删除)而失败。在此情况下,提供者将返回对 Errors 集合的警告但不停止程序执行。只有在所有需要的记录上发生冲突时才产生运行时错误。使用 Status 属性可定位发生冲突的记录。

将 Filter 属性设置为零长度字符串 ("") 与使用 adFilterNone 常量具有同样效果。

一旦设置 Filter 属性,当前记录位置将移动到 Recordset 中已筛选记录子集中的第一个记录。类似地,清除 Filter 属性后,当前记录位置将移动到 Recordset 的第一个记录。

有关可与 Filter 属性一起使用创建数组的书签值的解释,请参考 Bookmark 属性。
lazywolf 2001-12-24
  • 打赏
  • 举报
回复
可以用session存储查询语句,二次检索时调出上一次的查询语句,用下面的形式:
select * from (select * from ……) where……
可以试试!
ywrc 2001-12-24
  • 打赏
  • 举报
回复
or + and 还不够用吗?
ssm1226 2001-12-24
  • 打赏
  • 举报
回复
确实,ADO Recordset有Filter属性
红楼梦魇 2001-12-24
  • 打赏
  • 举报
回复
俺在msdn中找了半天也没有看到recordset有这么个属性,请指教。
julyclyde 2001-12-21
  • 打赏
  • 举报
回复
ADO Recordset的Filter属性就可以用,不一定要依靠数据库服务器
playmud 2001-12-21
  • 打赏
  • 举报
回复
如果不用临时表,我觉得其实和加上更多条件的搜索一样。
mjs2000 2001-12-21
  • 打赏
  • 举报
回复
临时表
outer2000 2001-12-21
  • 打赏
  • 举报
回复
FILETER;过滤呀

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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