[typecho]如何进行多表查询
前言
在typecho for twitter插件中,我增加了很多张表,有落地推文的表,有维护配置的表。 而现在因为增加了一个推文分类的功能,我需要两张表进行关联查询,那么在typecho
体系内,该如何处理呢?
搜索
我带入关键字去百度搜索typecho 多表查询
,基本上搜索的结果没有命中的。都是单表。 接着上不存在的一个搜索引擎搜索 typecho 多表查询
,好家伙,这不存在的搜索引擎也是啥都没有,最后没办法了,我只能查源码,毕竟多表联合查询这种场景是肯定存在的,果然,搜索到了。 www/var/Widget/Contents/Post/Admin.php
这个文件的execute
方法中
/** 过滤分类 */
if (NULL != ($category = $this->request->category)) {
$select->join('table.relationships', 'table.contents.cid = table.relationships.cid')
->where('table.relationships.mid = ?', $category);
}
有这样的一段代码,这段代码就是多表查询的关键了。
实践
所谓实践是检验真理的唯一标准,我将我的代码修改后终于成功。 原先的单表查询:
$sql=$db->select()->from('table.TwitterTweets')
->page($currentPage, $pageSize)
->order('table.TwitterTweets.tweets_id', Typecho_Db::SORT_DESC);
$current = $db->fetchAll($sql);
现在的多表联合查询:
$sql=$db->select()->from('table.TwitterTweets')
->page($currentPage, $pageSize)
->order('table.TwitterTweets.tweets_id', Typecho_Db::SORT_DESC);
$sql=$sql->join('table.TwitterTweetClassification', 'table.TwitterTweets.id_str = table.TwitterTweetClassification.id_str');
$current = $db->fetchAll($sql);
反省与自我批评
其实[http://docs.typecho.org/develop/db]上已经有了对应的教程,我没看到,这里摘抄下来:
联合查询
联合查询是SQL的常用语法,在Typecho中,您可以很方便的使用此类语句。下列代码展示了如何对两个表实现左连接
$select = $db->select() ->from('posts') ->join('category', 'posts.category_id = category.id', Typecho_Db::LEFT_JOIN) ->where('
type
= ?', 'post');
我们可以看到join方法一共有三个参数,第一个参数标明需要连接的表名,第二个参数是连接条件,第三个参数表示连接方法为左连接。其余的连接方式还有Typecho_Db::INNER_JOIN(内连接,如果第三个参数不填,则默认为内连接方式),Typecho_Db::OUTER_JOIN(外连接),Typecho_Db::LEFT_JOIN(左连接),Typecho_Db::RIGHT_JOIN(右连接)。
本文来自:[typecho]如何进行多表查询-小码农,转载请保留本条链接,感谢!
- 本文标签: typecho
- 本文链接: https://djc8.cn/archives/how-to-query-multiple-tables.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权