php – 将SQL查询循环合并到一个SQL查询中

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 将SQL查询循环合并到一个SQL查询中脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 PHP中构建了一个循环,可以生成500个SQL查询,但是我想将500个SQL查询合并为一个并获得相同的返回(公司和每个公司的用户数)

PHP代码示例

$companies =  array();
foreach ($fortune500Service->listAll() as $c ){
  $count = $entITyManager
  ->createQueryBuilder()
  ->select("count(u)")
  ->From("AppBundle\Entity\User","u")
  ->where("u.email LIKE :d")
  ->setParameter("d","%@" . $c["Domain"])
  ->getQuery()->getSingleScalarResult();

  if ($count == 0) {
    continue;
  }

  $companies[] = array(
      "Domain" => $c["Domain"],"Company" => "{$c["Company"]} ({$count})",);
}
return $companies;

我要合并的2个SQL查询的示例

查询1

SELECT 
  count(u0_.id) 
From 
  user u0_ 
WHERE 
  u0_.email LIKE '%@company1.COM'

查询2

SELECT 
  count(u0_.id)
FROM 
  user u0_ 
WHERE 
  u0_.email LIKE '%@company2.com'

我更喜欢使用createQueryBuilder http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-using-doctrine-s-query-builder解决方案,但我也很高兴使用sql本机查询.

解决方法

使用条件聚合:

SELECT COUNT(CASE WHEN u0_.email LIKE '%@company1.com' THEN 1 END) as First_cnt,COUNT(CASE WHEN u0_.email LIKE '%@company2.com' THEN 1 END) as First_cnt
FROM user u0_

脚本宝典总结

以上是脚本宝典为你收集整理的php – 将SQL查询循环合并到一个SQL查询中全部内容,希望文章能够帮你解决php – 将SQL查询循环合并到一个SQL查询中所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。