2016-04-06 10 views
4

PHPで500個のSQLクエリを作成するループを作成しましたが、500個のSQLクエリを1つにマージして同じリターンを取得したいと考えています私はSQLクエリを1つのSQLクエリにマージする

クエリ1

01をマージする2つの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; 

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ネイティブクエリで満足しています。条件付きの集約

+0

すべて 'LIKE「%@のsomecompany.com''条件u0_.email配列に入れて、OR''とそれらを結合します。 – syck

+0

私はすべての 'u0_.email LIKE '%@ somecompany.com''条件を配列に入れ、それらを' OR'で結合するとわかりません。私が得られる結果は、どの会社のユーザー数でもあります。たとえば、合計で4人のユーザー。私はこの結果を望んでいます:2ユーザーの会社1と2ユーザーの会社2。 –

+0

http://stackoverflow.com/questions/15230350/how-to-combine-results-of-two-queries-into-a-single-datasetの可能な公約 – WebInsight

答えて

1

用途:

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_ 
関連する問題