基于ThinkPHP的mysql 连表查询时,子表多条件,怎么查询?

我是这么写的,只得到了累计销售,我还想获得当月销售,同时输出这两个值。
图片描述
public function agentManage(){

    $m = M("dagent as a");
     $count = $m->count();
     $Page       = new \Think\Page($count,10);
     $show       = $Page->show();// 分页显示输出
     $list = $m->order('id desc')               
             ->field("a.id,a.agent_id,a.recommend_id,a.is_cash,a.status,sum(qp_dagent_sell.sell_num) as all_num")
             ->join("LEFT JOIN qp_dagent_sell ON qp_dagent_sell.agent_id = a.agent_id")
             ->group('qp_dagent_sell.agent_id')
             ->limit($Page->firstRow.','.$Page->listRows)->select();
             // $beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
             // $list = M("dagent_sell")->
             // ->field(sum(sell_num))
             // ->where("time >='$beginThismonth'");

     $this->assign("list",$list);
     $this->assign('page',$show);// 赋值分页输出
     $this->display();
}
阅读 5.4k
4 个回答

复杂的sql语句就直接写sql查吧,一年前就没用tp了,应该有类似findBySql() 的方法,前端的话注意防注入,处理一下就行。不用把模型查询写的这么复杂。

同意楼上的说法 有时当框架不能满足我们的需求时 就写原声sql语句 这个很正常

左连的话,右边没值的话就是空,所有遍历输出的时候要判断是不是空,空的话输出0

这种场景尽量避免使用 JOIN ,虽说一条 SQL 语句就行,减少了后端与数据库的连接耗时,但是对数据库压力会比较大。
需要通过计算得到的分析数据再次循环遍历去拿或者将关联字段拼接起来查询出整个计算数据的结果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题