标题:求教思路 和SQL语句
只看楼主
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
 问题点数:0 回复次数:9 
求教思路 和SQL语句
有两个表:
TABLE1---信息类别表。有字段:SORTID(类别ID),NLEVEL(类别等级),ROOTID(目录根,例如1,3 或 2,6,10),SORTNAME(类名)。

TABLE2--信息表。字段,ID,SORTID(类别ID),ROOTID(类别的目录根),TITLE。

问题:在信息展示的时候,如果是一类的最低层类的信息,展示没有问题,因为TABLE2中直接有他的类别ID,如果是想展示非最底层类的信息时,不知道该如何写,如何操作了。

思路1:取出,传递过来的类别SID,在信息表中,提取出所有ROOTID含有SID的记录。可是不知道该怎么写SQL语句,
SELECT * FROM TABLE2 WHERE SID IN ROOTID。意思对,但不正确。

思路2:把ROOTID,做成2维数组,每次都把传入的SID和整个表中所有数组值进行比较。恐怕运行起来速度太慢,耗费资源太大。

请大虾们指教。
搜索更多相关主题的帖子: SQL 语句 思路 
2006-05-22 17:39
zfjyyzycl
Rank: 2
等 级:论坛游民
帖 子:239
专家分:10
注 册:2006-4-15
得分:0 
不是太明白你的意思
是不是想建立类似于 微软 资源管理器的东西
2006-05-22 22:15
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
得分:0 
有两个表:
TABLE1---信息类别表。有字段:SORTID(类别ID),NLEVEL(类别等级),ROOTID(目录根,例如1,3 或 2,6,10),SORTNAME(类名)。
例子:SORTID NLEVEL ROOTID SORTNAME
1 1 1 第一大类
2 2 1,2 第一1类
3 1 3 第二大类
4 3 1,2,4 第一1一类

TABLE2--信息表。字段,ID,SORTID(类别ID),ROOTID(类别的目录根),TITLE。
例子: 1 2 1,2 我的信息
2 4 1,2,4 我的第二条信息

以上是数据库表结构及表内容。
下面开始前台调用:
在前台页面上把类别分别列出来: 第一大类/第一1类/第二大类/第一1一类
当浏览者,点“第一大类”时,在TABLE2 中属于第一大类子类的信息也应该提出。
问:怎样实现,搜索其子类。
2006-05-23 08:38
llingma
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2006-5-19
得分:0 
用一个string,经过合适的处理,符合SQL语句格式,放入IN中,类似SELECT * FROM TABLE2 WHERE ROOTID in("1,2","1,2,4")

2006-05-23 10:26
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
得分:0 
大侠,能不能讲的再清楚点?
比如,表中就有如上所有述的记录。
我想查看类别ID是1(第一大类),所包含的所有信息记录,该怎么写呢?
“select * from table2 where rootid in 1”

是这样吗?
2006-05-23 11:03
llingma
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2006-5-19
得分:0 
sql="SELECT * FROM TABLE2 WHERE ROOTID in('1')"
多于1条时为sql="SELECT * FROM TABLE2 WHERE ROOTID in('1','1,2')"

2006-05-23 15:50
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
得分:0 
谢谢,这思路对。
可是新问题是:
WHERE ROOTID in('1','1,2')"

‘1’,‘1,2’都是我们的测试值,如果换成变量的话,我又是一头雾水了。
我是这么想的:首先传递过来的类别ID号,不一顶是第几层的类号。
如果是最底层,当然没有子类,也就没有扩展的可能。
如果是 非最底层类,他应该有子类,子类的信息该如何获取呢?---就拿例子来说,如果传递过来的类别ID=1,那我们怎么获得‘1,2’?
2006-05-23 16:28
llingma
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2006-5-19
得分:0 

假如TABLE1的
比如你选TABLE1的SORTID=2的记录,该记录的ROOTID为1,2,你要选TABLE2中所有ROOTID为1,2的记录,你就这样写
select * from table2 t2 inner join table1 t1 on t1.rootid=t2.rootid where t1.sortid='2'
多于1条时类似
select * from table2 t2 inner join table1 t1 on t1.rootid=t2.rootid where t1 in ('1','1,2')
这是ORACLE的写法,看看SqlServer是不是一样,大抵差不多


2006-05-23 17:09
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
得分:0 
恩,我先想想,谢谢你
2006-05-24 13:50
xinxiang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-22
得分:0 
谢谢你,通过了。
呵呵。
非常感谢。
2006-05-24 15:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-66291-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.232269 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved