Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

运用模块的高级模式时经常用到的几条SQL

[复制链接]
lidq.jingwu 发表于 2009-9-28 14:01:08 | 显示全部楼层 |阅读模式
本帖最后由 lidq.jingwu 于 2009-11-11 10:27 编辑

资讯
查资讯自定义字段
  1. SELECT i.*,n.*,c.type as c_type,c.name as c_name,c.displayorder as c_displayorder,c.customfieldtext as c_customfieldtext,c.isdefault as c_isdefault,c.isshare as c_isshare FROM supe_spaceitems i, supe_spacenews n, supe_customfields c WHERE i.itemid = n.itemid AND n.customfieldid = c.customfieldid AND n.customfieldid !=0
复制代码
通过supe_spaceitems,supe_spacenews,supe_customfields三表联查来取得数据。

查资讯列表,同时查对应的图片附件
  1. SELECT * FROM supe_spaceitems i, supe_attachments a WHERE i.picid = a.aid
复制代码
查资讯列表和内容,同时查对应的图片附件
  1. SELECT i.*, n.message, a.* FROM supe_spaceitems i, supe_spacenews n, supe_attachments a WHERE i.picid = a.aid AND i.itemid=n.itemid
复制代码
调用模型中图片,标题,内容数据
  1. SELECT * FROM supe_[模型英文ID]message m,supe_[模型英文ID]items i WHERE m.itemid=i.itemid
复制代码
supe_[模型英文ID]message 与 supe_[模型英文ID]items 是存储模型信息的主表,添加的字段也会添加在 supe_[模型英文ID]message 里面,将这两个表联起来就可以查询出想要的大部分数据。

论坛
查询论坛中今天发帖总数与论坛总帖数
  1. select sum(posts) as posts , sum(todayposts) as todayposts from cdb_forums
复制代码
查询论坛主题,在设置主题分类时,显示出主题分类名称
  1. SELECT * FROM 数据库名.cdb_threads t, 数据库名.cdb_threadtypes y WHERE t.typeid = y.typeid
复制代码
查询论坛的主题,并显示版块名称:
  1. SELECT * FROM 数据库名.cdb_threads t, 数据库名.cdb_forums f WHERE t.fid = f.fid
复制代码
如何调用版块简介
  1. SELECT * FROM 数据库名.cdb_forums s,数据库名.cdb_forumfields f WHERE s.fid=f.fid
复制代码
从SS取Discuz!含有图片附件的最新主题
  1. SELECT * , a.attachment AS attachment FROM cdb_threads t, cdb_attachments a, cdb_posts p WHERE t.tid = a.tid AND a.isimage =1 AND p.tid = t.tid AND p.first =1 GROUP BY t.tid ORDER BY t.dateline DESC
复制代码
读取论坛 某个用户所收藏的主题:
  1. SELECT * FROM cdb_favorites f, cdb_members m, cdb_threads t WHERE f.uid = m.uid AND f.tid = t.tid
复制代码
调用论坛中每个主题调用一张图片的SQL:
  1. SELECT a. * , t. * , count( DISTINCT a.tid )
  2. FROM cdb_attachments a, cdb_threads t
  3. WHERE a.tid = (
  4. SELECT t.tid
  5. FROM cdb_threads t
  6. WHERE t.attachment =2
  7. ORDER BY dateline DESC )
  8. GROUP BY a.tid
复制代码
查询论坛的分类信息
论坛的分类信息是要四表联查的,并且不能一次查出来,分两次,第一次是将主题表与主题类型有联查(数据显示一次)
第二步是查询分类信息的各个选项的值,查询出来后进行循环显示
注意:因为很复杂,具体应用时,要先理解清楚,把SQL在数据库中运行一遍,想好怎么写展示代码
  1. SELECT * FROM cdb_threads t, cdb_threadtypes y WHERE t.sortid = y.typeid and t.tid=4
  2. select * from cdb_typeoptionvars v,cdb_typeoptions o where o.optionid=v.optionid and v.tid=4 and v.sortid=1
复制代码
如有其他需要请跟帖

评分

3

查看全部评分

abcnic18 发表于 2009-9-28 14:36:46 | 显示全部楼层
坐个沙发 来学习
回复

使用道具 举报

yayapi 发表于 2009-9-28 23:12:13 | 显示全部楼层
哈哈 今天刚问你就总结了 好人啊
回复

使用道具 举报

littlehz 发表于 2009-9-30 20:32:43 | 显示全部楼层
本帖最后由 littlehz 于 2009-11-20 16:58 编辑

补充几条:
1、查资讯列表,同时查对应的图片附件(列出仅含图片的文章)
  1. SELECT * FROM supe_spaceitems i, supe_attachments a WHERE i.picid = a.aid LIMIT 0,10
复制代码
2、查资讯列表和内容,同时查对应的图片附件
  1. SELECT i.*, n.message, a.* FROM supe_spaceitems i, supe_spacenews n, supe_attachments a WHERE i.picid = a.aid AND i.itemid=n.itemid LIMIT 0,10
复制代码
3、利用left join联合查询,得到所有文章(不含图片的输出NULL),比嵌套查询效率更高。
  1. SELECT i . * , n.message, a . *
  2. FROM supe_spaceitems i
  3. INNER JOIN supe_spacenews n ON i.itemid = n.itemid
  4. LEFT JOIN supe_attachments a ON i.picid = a.aid
  5. ORDER BY i.itemid DESC
  6. LIMIT 0 , 10
复制代码
回复

使用道具 举报

littlehz 发表于 2009-10-8 11:48:19 | 显示全部楼层
从SS取Discuz!含有图片附件的最新主题
  1. SELECT * , a.attachment AS attachment FROM cdb_threads t, cdb_attachments a, cdb_posts p WHERE t.tid = a.tid AND a.isimage =1 AND p.tid = t.tid AND p.first =1 GROUP BY t.tid ORDER BY t.dateline DESC LIMIT 0,10
复制代码
回复

使用道具 举报

lsmsky 发表于 2009-10-8 14:30:05 | 显示全部楼层
本帖最后由 lsmsky 于 2009-10-8 14:42 编辑

后面的LIMIT 0,10是什么意思呀?
是不是取10条的意思?
如果我要选择某一个分类下的帖子,还要加什么条件呀
回复

使用道具 举报

 楼主| lidq.jingwu 发表于 2009-10-9 12:09:22 | 显示全部楼层
5# littlehz


    这三条SQL中的limit 限制可以去掉,由block块中的limit来限制,效果一样,而且更灵活。
回复

使用道具 举报

 楼主| lidq.jingwu 发表于 2009-10-9 12:13:44 | 显示全部楼层
6# lsmsky

查询论坛主题,在设置主题分类时,显示出主题分类名称:
可以解决你的问题,同时如果调用某一分类的可以将typeid固定,如
    SELECT * FROM 数据库名.cdb_threads t, 数据库名.cdb_threadtypes y WHERE t.typeid = y.typeid AND t.typeid=值
回复

使用道具 举报

lsmsky 发表于 2009-10-9 12:20:00 | 显示全部楼层
好的,谢谢。问题已解决。
回复

使用道具 举报

bobo7810 发表于 2009-10-15 10:09:05 | 显示全部楼层
查询论坛主题,在设置主题分类时,显示出主题分类名称,同时如果调用某一分类的可以将typeid固定,如:
    SELECT * FROM 数据库名.cdb_threads t, 数据库名.cdb_threadtypes y WHERE t.typeid = y.typeid AND t.typeid=值    SELECT * FROM 数据 ...
lidq.jingwu 发表于 2009-10-9 12:13



太感谢!终于解决了这个问题。

如果要提取每个论坛分类名称中的前2条,该怎么写呢?还有提取论坛tags做为分类名称呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-9-28 09:32 , Processed in 1.083826 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表