[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]如何进行多表查询 - https://djc8.cn/archives/how-to-query-multiple-tables.html
版权声明: 知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

标签: typecho

添加新评论