我在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;
我将为您翻译两个需要合并的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
连接它们。 - sycku0_.email LIKE '%@somecompany.com'
条件放入一个数组中,并用OR
连接它们。那么我得到的结果是任何公司的用户数量。例如总共有4个用户。我想要的结果是:2个用户在Company1,2个用户在Company2。 - Adolfo Luzardo CabreraUNION
进行合并。 - syck