Maison >développement back-end >tutoriel php >méthode simple thinkPHP pour implémenter plusieurs instructions de sous-requête
Cet article présente principalement la méthode de thinkPHP pour implémenter simplement plusieurs instructions de sous-requête, et compare et analyse les techniques d'implémentation spécifiques des instructions de sous-requête dans thinkPHP sous forme d'exemples. Les amis dans le besoin peuvent se référer aux exemples de cet article
Découvrez comment thinkPHP implémente simplement plusieurs instructions de sous-requête. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants : Les instructions SQL sont larges et profondesComprenez bien les instructions SQL et vous pouvez faire bon usage des opérations de base de données dans des frameworks tels que thinkphpSQL original :
SELECT a.*,b.* from (SELECT a.id as opener_id,a.name,sum(c.money) as bonus_money,c.year,c.month from sh_opener a LEFT JOIN sh_opener_bonus b on a.id = b.opener_id LEFT JOIN sh_incentive c on b.incentive_id = c.id where a.agent_id = 3 and a.status = 1 and c.year = 2015 and c.month = 11 GROUP BY a.id,c.year,c.month) a LEFT JOIN (SELECT a.id as payment_id,a.opener_id,a.money as payment_money,a.trode_number from sh_opener_bonus_payment a where a.year = 2015 and a.`month` = 11 and a.agent_id = 3) b on a.opener_id = b.opener_id;Il contient deux instructions de sous-requête. les instructions sont aussi des tableaux, mais elles sont simplement stockées en mémoire.
Implémentation de thinkphp :
$useYear = date('Y',strtotime('last month')); $this->assign('useYear',$useYear); $useMonth = date('m',strtotime('last month')); $this->assign('useMonth',$useMonth); // 获取上一月人员的奖金金额 // 子查询1 $whereSub1['a.agent_id'] = $this->agent_id; $whereSub1['a.status'] = 1; $whereSub1['c.year'] = $useYear; $whereSub1['c.month'] = $useMonth; $subQuery1 = M()->table('sh_opener a')->join('sh_opener_bonus b on a.id = b.opener_id')->join('sh_incentive c on b.incentive_id = c.id')->where($whereSub1)->group('a.id,c.year,c.month')->field('a.id,a.name,sum(c.money) as bonus_money,c.year,c.month')->select(false); // 子查询2 $whereSub2['a.agent_id'] = $this->agent_id; $whereSub2['a.year'] = $useYear; $whereSub2['a.month'] = $useMonth; $subQuery2 = M()->table('sh_opener_bonus_payment a')->where($whereSub2)->field('a.id as payment_id,a.opener_id,a.money as payment_money,a.trode_number')->select(false); $list = M()->table($subQuery1.' a')->join($subQuery2.' b on a.id = b.opener_id')->select(); $this->assign('list',$list);En fait, l'encapsulation de SQL par le framework thinkphp sera finalement reconstituée dans l'instruction SQL. Recommandations associées :
Explication détaillée de l'espace de noms du framework thinkPHP5.0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!