Jfinal的ActiveRecord外键关联查询问题

Alan-Yeh 发布于 2015/07/15 14:48
阅读 585
收藏 0

@Jfinal ,@绝望的八皮 你好:

      在使用JFinal的过程中,我现在遇到了一个问题不知道怎么解决,望你们能指点一下。

      现有数据结构:Blog保存博客信息,User保存用户信息,User和Blog是一对多的关系。

      现在,我准备开发一套Api供他人使用,数据格式如下:

{

      "status": 200,

      "data:": [

                      {"user_id":"123",

                       "user_name":"这是一个用户名",

                       "blogs":[

                                   {"blog_id":"1234",

                                    "title":"这是一个标题"},

                                   {"blog_id":"2234",

                                     "title":"这是另一个标题"}]

                        }]

}

         我现在的处理方法是先查出users,然后再循环user将blogs查出来后set进user中,最后renderJson。这样的处理方就是效率很差,如果有N个用户,就得执行N+1次sql,效率非常低。

         请教一下,有没有什么好的解决方案

加载中
0
JFinal
JFinal

    如果不要求一次性显示所有 blogs,那么可以用类似于 ajax 的方式,及时触发对某个特定 user 的 blogs 查询。

    如果一定要一次性得到多个 users 的及其对应的多个 blogs,可以先通过一条 sql 查出 users,然后再通过一条 sql 查出这些 users 的 blogs,然后在内存中将这些 blogs 对应到相应的 user 上对,只需要两条 sql 即可。如果数据量非常之大,可以考虑采用分页或者缓存之类的方式,也可以设计有针对性的算法来决定数据加载的策略。

Alan-Yeh
Alan-Yeh
回复 @糊搞 : 没有, 这个只是个例子, 不是真的做博客系统. 我是做一个Api给移动端, 需求是一次性将一些配置信息返回给移动端, 而这些配置并不是在一个表里的, 就会有上述描述的问题. 好比权限信息
糊搞
回复 @yerl : 这样并不是好办法,因为,你的Sql没法控制每个Users的Blogs的数量,结果是取得的Blogs数量可能惊人。。。修改业务对性能才有更大的提升
JFinal
JFinal
回复 @yerl : 数据量不大,在内存中做循环是非常之快的,不用担心
Alan-Yeh
Alan-Yeh
大概明白你的意思了, 就是第二条的sql用in将所有的user下的blogs查出来再绑定. 这样的确也是一个解决办法. 不过这个好像要循环蛮多次的, 用了缓存的话, 应该影响也不大. 谢谢你的指导
返回顶部
顶部