|
主题: SQL查询语句问题
|
风之翅
职务:普通成员
等级:2
金币:10.0
发贴:540
|
#12003/9/12 22:18:46
遇到难题了,好几天都没有解决:(,关于论坛我参与的主题的问题 数据表:fid(帖子ID),fposter(发帖者),frepid(0为主题帖,其余数字对应回复主题fid) 我原来是先用fposter,和frepid<>0找出frepid(建一个Recordset),再一个个找对应主题fid(另建一个Recordset),可是觉得可能太耗资源了,每一个查询都要重建一个Recordset啊。能否只用一个SQL语句就查询了,或是我的数据表设计有缺陷?我SQL语法不熟啊,谢谢指教,请喝酒哦
|
janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#22003/9/12 22:28:04
SELECT DISTINCT fID FROM tPost WHERE fPoster='"& strUser &"' ORDER BY fID DESC"
编辑历史:[这消息被janlay编辑过(编辑时间2003-09-12 22:50:41)]
|
风之翅
职务:普通成员
等级:2
金币:10.0
发贴:540
|
#32003/9/12 22:43:10
我原来是是先建一个Recordset "SELECT frepid FROM bbs WHERE fposter = '"&Session("MM_Username")&"' And frepid <> 0 Order by fposttime ASC " 再用rspost.Fields.Item("frepid").value = fid 再建一个Recordset找出该回复的主题ID 这样太累了。。。
|
janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#42003/9/12 22:49:14
这样太累,换一个方式思考:现在只需要取得用户所有的帖子。从这个基点出发,问题就简化了很多
|
风之翅
职务:普通成员
等级:2
金币:10.0
发贴:540
|
#52003/9/12 23:00:28
呵呵,取这个用户的所有回复类帖子好办啊,但是不能显示这个回复帖子的主题就不好看了啊,我试试改数据表好了
|
janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#62003/9/12 23:14:27
忘了说了,这种方式要求能显示任意一个帖子(即使它不是主题的第一个帖子,很多论坛支持这种方式)
|
janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#72003/9/12 23:18:10
如果都得到主题帖的ID,试试这种写法: SELECT DISTINCT (CASE WHEN fRepID=0 THEN fIDd ELSE fRepID END) AS ID FROM bbs WHERE fPoster = '"& Session("MM_Username") &"' ORDER BY fID" 提示:按照ID排序比按时间字段排序速度快,尤其是在给ID字段加了索引时
编辑历史:[这消息被janlay编辑过(编辑时间2003-09-12 23:19:05)]
|
风之翅
职务:普通成员
等级:2
金币:10.0
发贴:540
|
#82003/9/12 23:21:45
非常感谢这么快的回复 我在看动网论坛源代码,希望可以解疑
|
janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#92003/9/12 23:33:48
这里关键就是根据条件判断将不同的ID作为同一个结果使用,SQL语句里面的 case when 可以实现这一点
编辑历史:[这消息被janlay编辑过(编辑时间2003-09-12 23:34:29)]
|