CMSware数据库调用CMS SQL
导航:返回上一页
该调用标签可实现对数据库的直接查询调用.
本标签对应的系统调用函数为CMS_SQL()。
CMS_SQL调用支持page分页、支持使用“#TABLE_HEADER#” 符号替换表名、支持子查询。只支持当前数据库帐号能访问的数据库,要查询远程数据库,可以单独用mysql_connect创建一个远程连接,再进行独立查询
属性 | 必需 | 默认值 | 描述 |
---|---|---|---|
<CMS action="SQL" return="List" query="" Num="" Tpl="" Cache="" returnKey="" /> | |||
query | 是 | - |
数据库查询语句 例如query=“SELECT * FROM cmsware_site” |
Num | 否 | - |
调用条数
注意:当你使用Num参数时,不要再在query的sql语句中使用Limit 语法。 |
Tpl | 否 | - |
指定调用的子模版
|
Cache | 否 | - |
模版中的CMS调用通过使用Cache,可以大幅提升批量更新的效率. 该标签只有门户版可用
|
returnKey | 否 | - |
可以定义内容列表记录返回那些字段,一般列表只需要获得Title即可,而无需返回Content 等字段,使用此属性,可以一定程度上提高更新效能。 该标签只有门户版可用
|
键名 | 类型 | 描述 |
---|---|---|
返回2维数组($List),该数组的组成基于查询语句的返回字段,如果查询语句包含NodeID的返回字段,List数组会自动附加以下键值 | ||
NodeInfo | array | 结点信息数组,具体组成参见{cmsware}/sysdata/sysinfo /node000x.php |
NodeName | string | 结点名称 |
NodeURL | string | 结点首页URL |
例子 1:结点数据库调用
调用代码:
<CMS action="SQL" return="List" query="select * from cmsware_site where Disabled=0" />
<loop name="List" var="var" key="key" >
<a href="[$var.NodeURL]">[$var.Name]</a>
</loop>
'''例子 2:复杂分页调用''' 调用代码: <pre> <CMS action="SQL" return="List" query="select i.URL,c.ContentID,c.Title,c.Content from #TABLE_HEADER#content_1 c left join #TABLE_HEADER#content_index i ON i.ContentID=c.ContentID order by c.ContentID DESC" Num="page-20" /> <loop name="List" var="var" key="key" > <a href="[$var.URL]"> [$var.Title] </a><br> </loop> [@list_page( $PageInfo.TotalPage, $PageInfo.CurrentPage, $PageInfo.URL)]
例子 3:调用discuz公告和新贴
- 调用公告:
<CMS action="SQL" return="List" query="select id,subject from DATABASE.TABLEPRE_announcements order by id DESC" Num="4" /> <ul> <loop name="List" var="var" key="key"> <li><a class=black href="[$BBS_URL]announcement.php?id=[$var.id]#[$var.id]" target="_blank">[@CsubStr($var.subject,0,15,"")]</a> <li> </loop> </ul>
[@CsubStr($var.subject,0,15,"")]
为取公告标题的前15个字符,并且后面不加 "..."
若论坛和思维(CMSware)安装在同一数据库,则上述语句为:
<CMS action="SQL" return="List" query="select id,subject from TABLEPRE_announcements order by id DESC" Num="4" />
Num="4" 指定调用的条数为4条
[$BBS_URL]:你在模版变量管理设置的论坛路径。在模版变量管理将这个变量的值改为您的论坛路径即可
- 调用ID为1的论坛新贴:
<CMS action="SQL" return="List" query="select tid,fid,subject as title,dateline as PublishDate from DATABASE.TABLEPRE_threads WHERE fid IN('1') order by tid DESC" Num="10" /> <LOOP name="List" var="var" key="key"> <!--调用前10条记录--> <li><span>[[@date("Y-m-d", $var.PublishDate)]]</span><a href="[$BBS_URL]viewthread.php?tid=[$var.tid]" title="[$var.Title]" target="_blank"> [$var.title]</a> <br> </LOOP>
- 调用所有的论坛新贴:
<CMS action="SQL" return="List" query="select tid,subject as title,dateline as PublishDate from DATABASE.TABLEPRE_threads order by tid DESC" Num="10" /> <LOOP name="List" var="var" key="key"> <!--调用前10条记录--> <li><span>[[@date("Y-m-d", $var.PublishDate)]]</span><a href="[$BBS_URL]viewthread.php?tid=[$var.tid]" title="[$var.Title]" target="_blank"> [$var.title]</a> <br> </LOOP>
[$BBS_URL]:你在模版变量管理设置的论坛路径。在模版变量管理将这个变量的值改为您的论坛路径即可
<CMS action="SQL" return="List" query="select id,subject from DATABASE.TABLEPRE_announcements order by id DESC" Num="4" />
DATABASE为discuz安装的数据库、换成你自己的(默认为 cdb),TABLEPRE为表前缀、换成你自己的(默认为cdb)。
例子 4:调用VBB论坛新帖子和公告
- 调用VBB论坛新帖子:
<CMS action="SQL" return="List" query="select postid,title from newvbbcore.vbb_post order by postid DESC" Num="4" /> <loop name="List" var="var" key="key"> <li> <a href="[$BBS_URL]showthread.php?p=[$var.postid]#post[$var.postid]" target="_blank">[@CsubStr($var.title,0,15,"")]</a> </li> </loop>
- 调用VBB论坛公告:
<CMS action="SQL" return="List" query="select announcementid,title from newvbbcore.vbb_announcement order by announcementid DESC" Num="5" /> <loop name="List" var="var" key="key"> <P><a class=black href="[$BBS_URL]announcement.php?a=[$var.announcementid]&f=3" target="_blank">[@CsubStr($var.title,0,15,"")]</a> </P> </loop>
说明:
"select announcementid,title from newvbbcore.vbb_announcement order by announcementid DESC"--“newvbbcore.”为VBB安装数据库,和思维(CMSware)在同一数据库时此处留空;“vbb_”为数据表前缀,没有前缀时留空;
"[$BBS_URL]announcement.php?a=[$var.announcementid]&f=3" ,特别注意这里“f=3”的3为版块号,调用公告时必须指定一个版块号
例子 5:统计编辑工作量
调用代码:
<!--#CW# 统计一段时间内各编辑人员发表内容的数量 用动态发布实现,传入URL参数按顺序分别为:此模版绑定的文章IndexID,0,开始日期,结束日期 (注意:统计日期条件是前等后不等) 示例:http://cmsware/publish/content.php/231,0,2006-01-31,2006-06-02.html 如果是iis不支持pathinfo传递参数,请用下面这种形式 示例:http://cmsware/publish/content.php?IndexID=231& Page=0,2006-01-31,2006-06-02.html #CW#--> 统计日期[$Custom1] 到 [$Custom2] 的稿件数量 <br /> <br /> <!--#CW# 如果统计速度很慢,请给content_index内容索引表和content_*的内容模型表中的字段ContentID和CreationDate和 CreationUserID都加上索引,普通索引就可 #CW#--> <op exp=" $tableid_list = array('1','2','3','4','5','6') " /> <!--#CW# 需要统计的内容模型号列表 #CW#--> <loop name="tableid_list" var="vartable" key="keytable"> <br /><br /> 模型号:[$vartable] <hr> <cms action="SQL" return="List" query="SELECT CreationUserID userid,COUNT(IndexID) nums FROM cmsware_content_index i Left Join `cmsware_content_{$vartable}` c ON i.ContentID=c.ContentID WHERE i.Type=1 and i.State=1 and ( CreationDate>=UNIX_TIMESTAMP('{$Custom1}') and CreationDate<UNIX_TIMESTAMP('{$Custom2}') ) GROUP By CreationUserID" /> <!--#CW# SELECT CreationUserID userid,COUNT(IndexID) nums FROM cmsware_content_index i Left Join `cmsware_content_[$vartable]` c ON i.ContentID=c.ContentID WHERE i.Type=1 and i.State=1 and ( CreationDate>=UNIX_TIMESTAMP('[$Custom1]') and CreationDate<UNIX_TIMESTAMP('[$Custom2]') ) GROUP By CreationUserID #CW#--> 人员ID号,稿件数量<br /> <loop name="List" var="var" key="key"> [$var.userid] , [$var.nums]<br /> </loop> </loop>
用动态发布实现,传入URL参数按顺序分别为:此模版绑定的文章IndexID,0,开始日期,结束日期 (注意:统计日期条件是前等后不等)
(示例:http://cmsware/publish/content.php/231,0,2006-01-31,2006-06-02.html)
如果是iis,由于不支持pathinfo传递参数,请用下面这种形式
(示例:http://cmsware/publish/content.php?IndexID=231& Page=0,2006-01-31,2006-06-02.html)