主题:  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)]