【发布时间】:2016-07-26 22:10:00
【问题描述】:
我在 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 原生查询也很满意。
【问题讨论】:
-
将所有
u0_.email LIKE '%@somecompany.com'条件放入一个数组中,并与OR连接起来。 -
我不确定,但如果我将所有
u0_.email LIKE '%@somecompany.com'条件放入一个数组并与OR一起加入它们。我将得到的结果是任何公司的用户数量。例如总共 4 个用户。我想要这个结果:2 个用户 Company1 和 2 个用户 Company2。 -
你可以
UNION他们。
标签: php mysql sql-server symfony