100!在线等待,如何实现二次查询!

liuguihua 2004-03-22 01:52:11
在线等待,如何实现二次查询!希望更多的兄弟姐妹发言!怎么样实现更简单的二次查询操作!
...全文
112 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
tracy_qd 2004-03-27
  • 打赏
  • 举报
回复
例:
select sum(field1),field2 from tablename group by field2 having sum(field1)>20

其中的having就是对前面的select查询结果进行再次约束
panda0379 2004-03-27
  • 打赏
  • 举报
回复
搞个二级联动,一切ok
我们以人事管理中的部门级别进行联动方法的说明,认识管理中的部门级别可以这样定义,也是实际企业的定义规则,**化工厂/**系统/**部,举例说明就是

××化工厂/营销系统/市场部,在文中,FirstOrganization表对应的是”××化工厂”,SecondOrganization对应的是”营销系统”,ThirdOrganization对应的是”市场部”



在SQL SERVER 2000中新建两个表,或者三个表,为了我们能更大限度的发挥联动的功能,我们建三个表,呵呵。

数据库名称:xxrl_STUDY,用户名xxrl_STUDY,密码xxrl_STUDY

接着建ODBC数据源,你也可以不用,但我这样用,呵呵

ODBC名:xxrl_ ODBC,用用户名xxrl_STUDY,密码xxrl_STUDY连接,指向xxrl_STUDY数据库,默认中文设置,测试――>ok

新建表:

第一个表FirstOrganization

SQL脚本如下:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FirstOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[FirstOrganization]

GO



CREATE TABLE [dbo].[FirstOrganization] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

第二个表SecondOrganization

SQL脚本如下:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SecondOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[SecondOrganization]

GO



CREATE TABLE [dbo].[SecondOrganization] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[parentID] [int] NOT NULL ,

[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,

[OrderNumber] [int] NULL

) ON [PRIMARY]

GO



第三个表ThirdOrganization

SQL脚本如下:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ThirdOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[ThirdOrganization]

GO



CREATE TABLE [dbo].[ThirdOrganization] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[parentID] [int] NOT NULL ,

[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,

[OrderNumber] [int] NULL

) ON [PRIMARY]

GO



Ok,ODBC,我们建好了,数据库也建好了,至于站点的配置,我想大家都应该知道的,这里不再陈述。这里我的站点IP是http://200.100.100.88 (内部网络IP)

终于开始写程序喽,好累,噗哧,噗哧,刚帮我同事搬东西,歇一会儿,coffee-ing……….

好的,为了方便IIS他老人家,我们也懒得敲多余的字母,我们是聪明的,不勤劳的程序员,本来程序员就已经够累的了,还不方便我们自己?嘿嘿,赞同者鼓掌,啪啪啪啪,faint,哪来的鞭炮?啥家的小孩也不好好管管。。。。。。。。。J

新建default.asp文件,我们在写如下程序,

建立数据库连接对象,

set objconn=server.CreateObject("adodb.connection")

objconn.Open " xxrl_ ODBC ","xxrl_STUDY","xxrl_STUDY"

然后打开我们要进行操作的3个数据集

dim sql1,sql2,sql3

sql1="select * from FirstOrganization"

sql2 = "select * from SecondOrganization"

sql3 = "select * from ThirdOrganization"

‘/////////////////////////打开第一组织库

set rs1=server.CreateObject("adodb.recordset")

rs1.Open sql1,objconn,1,1



set rs2=server.CreateObject("adodb.recordset")

rs2.Open sql2,objconn,1,1



set rs3=server.CreateObject("adodb.recordset")

rs3.Open sql3,objconn,1,1



建一个SELECT类型的HTTP控件,包含在form表单中如下:

‘////////////////////控件的初始值是从FirstOrganization中读取的,FirstOrganization在本例子中只有一个数据就是××化工厂代码如下:

<form name=form1 style="margin:0;" method="post">

<select name=FirstOrganization>

<%

if rs1.RecordCount >0 then

Response.Write"<option value="&rs1(“id”)&”>”&rs1("OrganizationName")&"</option>"

Else

Response.Write "没有配置"

end if

%>

</select>

</form>

好,这就是我们的联动功能的头

下面我们要建立第二个select控件了,第二个select控件中,我们用到了onchange函数,关于这个函数的详细解释,请看MSDN。代码如下(包含在form中):

<select name=SecondOrganization onchange=”ChangeLocationi(form1.SecondOrganization.options[form1.SecondOrganization.selectedIndex].value);”>

<option value=””>-------------</option>

<%

if rs2.RecordCount<0 then

response.write “<option value=””””>库中没有部门!</option>”

else

while not rs2.eof

response.write “<option value=”&rs2(“id”)&”>” &rs2(“OrganizationName”)&”</option>”

rs2.movenext

wend

end if

%>

</select>

OK,第二个也搞定,下面我们来建立第三个SELECT 同样放在form表单里,如下:

<select name=ThirdOrganization>

</select>

不要忘记关数据集噢,

rs1.close

set rs1 = nothing

rs2.close

set rs2 = nothing

rs3.close

set rs3 = nothing

ok,页面元素全部准备就绪,下面开始我们真正的联动之旅。

本例子采用ASP和JAVASCRIPT交互的方法取数据库中的数据,由于我们在form表单前我们新建script脚本快,由于要交互,所以我们要这么写才能很好的交互

<%=”<script language=javascript>”%>

</script>

然后我们就可以在script块中书写我们的程序了。

我们的基本操作是根据二级下拉中得出三级下拉,二级我们都从数据库中取出来了,下面我们要取三级组织的数据了,如下

<%=”<script language=javascript>”%>

<%’asp块

dim sql_GetThirdOrganization

sql_GetThirdOrganization = "select * from ThirdOrganization order by id desc"

set rs_GetThirdOrganization = server.CreateObject("adodb.recordset") rs_GetThirdOrganization.Open sql_GetThirdOrganization,objconn,1,1

%>

var temp,temp_2;//////////////javascript块

temp=0;///////////////////for循环变量初始化

Related = new Array();//////////////////////数组,用来存放三级组织的id,名称,和对应的父ID

<%

temp_2 = 0 ‘一个临时变量,用来存放三级组织的个数

while not rs_GetThirdOrganization.eof ‘循环第三级组织

%>

////////////三维分别对应的第三级组织的ID,第三级组织的名称

////////////第三级别组织的父ID(即第二级别ID)

Related[<%=temp_2%>] = new Array("<%=rs_GetThirdOrganization(“id”)%>","<%=rs_GetThirdOrganization(“OrganizationName”)%>","<%=rs_GetThirdOrganization(“parentID”)%>");

<%

temp_2 = temp_2 + 1

rs_GetThirdOrganization.movenext

wend

%>

temp = <%=temp_2%>;

function ChangeLocation(id){ ////

var id = id; 接受二级菜单的选择的item的索引值

document.form1.ThirdOrganization.length=0; //初始化第三级菜单的长度,下标从0开始

var i = 0;

/////////////////初始化第三级菜单的text和value属性的值,第一个参数值是text ”--------”,二是////////value 空值

document.form1.ThirdOrganization.options[0]=new Option('-------','');

////////////循环数组,用数组的第三维数(父ID)和函数传过来的数进行比较

for(i=0;i< temp;i++){

if(Related[i][2]==id){ /////////如果相等,证明在第三级里面有输入第二级组织的子集

///////////////////并将子集(第三级)的值赋给第三个select,

document.form1.ThirdOrganization.options[document.form1.ThirdOrganization.length] = new Option(Related[i][1], Related[i][0]);

}

}

}

</script>

最后在页面的最后可不要忘了添加objconn.close噢,呵呵

上面介绍的东西,主要是根据选择第二个select来联动第三个select,那么如果我们在第三个select控件处这样再定义一个函数如下:

<select name=ThirdOrganization onchange=”fnChangeAgain(form1.ThirdOrganization.options[form1.ThirdOrganization.selectedIndex].value)”>

</select>

这样,再在script块中再写一个同样的函数,函数内容同ChangeLocation函数,是不是实现了三级联动,那么依此类推,呵呵,10级别联动都可以做,只不过麻烦而已
liuguihua 2004-03-23
  • 打赏
  • 举报
回复
兄台所言,当我的在结果中二次查询无限的下去,而我的记录又是上百万条记录,不是很消耗资源吗,现在我在探索用xml的方法实现,但是,小弟学艺不精,所有还没得出结果,
naguijun 2004-03-22
  • 打赏
  • 举报
回复
你是这个意思吗?

Set objRs = Server.CreateObject("ADODB.Recordset")
Set objSubRs = Server.CreateObject("ADODB.Recordset")

strSql1= "SELECT fieldA,fieldB FROM tabble1"
objRs.Open strSql1,objConn ,adOpenStatic
Do While Not objRs.Eof
strSql2 = "SELECT * FROM table2 WHERE table2.fieldA ='"&objRs("fieldA")&"'"
objRs.Open strSql2,objConn ,adOpenStatic

lcx45 2004-03-22
  • 打赏
  • 举报
回复
用视图:
先建立视图:create view 视图名(试图中想要的属性名,如:姓名,性别,国家)
as
select 姓名,性别,国家
from A
where 国家="中国" and 性别="男";

然后可以在视图中查询信息:select * from 视图名 where 地址=“北京”;
lcx45 2004-03-22
  • 打赏
  • 举报
回复

select * from 表名1 group by
(select 地址 from 表名2 where 国家="中国" and 性别="男")
having 地址="北京";
whghwujx 2004-03-22
  • 打赏
  • 举报
回复
select*from A where guojia="中国" and xinbie='男' and dizhi='北京'
呵呵:)
efei 2004-03-22
  • 打赏
  • 举报
回复
楼主,我来说两句:
其实你要的就是嵌套查询,比如:
select * from [select * from tbl_user]. a
其实这句SQL是没有任何实际意义的,我们不会真的这么写,但是结构都是一样的
就是用“[]”把SQL括起来,后面加上“.”和一个别名,如a。就可以了
还可以几个表一起查,如:
select * from tbl_aaa a,[select * from tbl_bbb]. b where a.no=b.no
vvfish119 2004-03-22
  • 打赏
  • 举报
回复
视图?
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
高手们,会个话嘛!
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
qzriso(E形虫),怎么用 rs.find
qzriso 2004-03-22
  • 打赏
  • 举报
回复
那就用rs.find
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
用临时表在资源消耗方面不是会很大吗????还有没有更优化的查询,高手们!
luluso 2004-03-22
  • 打赏
  • 举报
回复
临时表
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
ralphchen(听海) 说得对就是在recordset中?
zfpok 2004-03-22
  • 打赏
  • 举报
回复
使用视图!
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
ralphchen(听海) 说得对
就是在recordset进行在查询!
tzgpxl 2004-03-22
  • 打赏
  • 举报
回复
把具体情况说明白,一般情况下不必要进行二次查询,都有另外的解决办法的,
把具体问题说明白
liuguihua 2004-03-22
  • 打赏
  • 举报
回复
比如我对信息库A进行操作,select*from A where guojia="中国" and xinbie='男'
然后我又在刚刚查询的结果中查询地址是北京的用户,怎么操作,哥哥姐姐门!
qzriso 2004-03-22
  • 打赏
  • 举报
回复
多加一个查询条件不就可以了吗
strSQL="select * from tablename where " & 条件1
二次查询 strSQL="select * from tablename where " & 条件1 & 条件2
加载更多回复(7)

28,391

社区成员

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

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