Maison  >  Article  >  développement back-end  >  méthode simple thinkPHP pour implémenter plusieurs instructions de sous-requête

méthode simple thinkPHP pour implémenter plusieurs instructions de sous-requête

不言
不言original
2018-05-03 16:31:242777parcourir

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 profondes

Comprenez bien les instructions SQL et vous pouvez faire bon usage des opérations de base de données dans des frameworks tels que thinkphp

SQL 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn