本帖最后由 netnolimit 于 2009-10-20 22:59 编辑
目前,默认的会调用同一主题下的多张图片,而出现标题重复的情况,对网站的体验不好。
实际通过模块管理可以实现,只调用同一主题的一张图片。
登录后台
创建模块-》论坛附件-》高级模式- SELECT t . * , a . *
- FROM discuz.cdb_threads t
- INNER JOIN discuz.cdb_attachments a ON t.tid = a.tid
- AND t.authorid = a.uid
- WHERE a.isimage=1
- GROUP BY t.tid
- ORDER BY t.views DESC
复制代码 其它选项按自己的需求填写。
提交保存。
将得到的代码复制到调用的部分
比如我这里是- <!--{block name="bbsattachment" parameter="sql/SELECT%20t%20.%20%2A%20%2C%20a%20.%20%2A%20%0D%0AFROM%20discuz.cdb_threads%20t%0D%0AINNER%20JOIN%20discuz.cdb_attachments%20a%20ON%20t.tid%20%3D%20a.tid%0D%0AAND%20t.authorid%20%3D%20a.uid%0D%0AWHERE%20a.isimage%3D1%0D%0AGROUP%20BY%20t.tid%0D%0AORDER%20BY%20t.views%20DESC/limit/0,6/cachetime/3600/subjectlen/36/subjectdot/1/cachename/bbs_hotpic/tpl/data"}--><!--论坛热图-->
复制代码 不要奇怪,上面不是什么乱码,是生成的调用代码。
对上面几处特别说明的地方:
1,t.authorid = a.uid 这里主要判断了这个主题与附件是不是为同一作者,不要这一处,会出现,lz发表的帖子没有图片,如果回贴者发了图片,也会调用出来。
2,GROUP BY t.tid 利用tid的唯一性和 group by的分组查询就得到了只检索出一行包含图版主题的帖子。
------------------------------------------------------------------
有朋友需要用到时间限制和指定版块的:
完善了调用代码:
SELECT t. * , a. *
FROM yv_bbs.cdb_threads t
INNER JOIN yv_bbs.cdb_attachments a ON t.tid = a.tid
AND t.authorid = a.uid
WHERE t.fid
IN ( 11, 13 )
AND a.isimage =1
AND t.dateline >= UNIX_TIMESTAMP( ) -604800
GROUP BY t.tid
ORDER BY t.views DESC
LIMIT 0 , 30
使用说明:yv_bbs 要改成你自己的数据库名,(用了代码没有效果的应该是没有修改这儿)
UNIX_TIMESTAMP( ) -604800 是对七天内的帖子的调用。7×24×60×60得来,举一反三、天、月的调用很容易实现了。
t.fid IN ( 11, 13 ) 这里就是指定版块了。括号里是版块ID,注意是英文的逗号符,作为间隔的 |