原创

[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]如何进行多表查询-小码农,转载请保留本条链接,感谢!

温馨提示:
本文最后更新于 2021年02月20日,已超过 1,357 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录