2016-04-06 18 views
4

500 SQL sorgusu yapan bir döngü oluşturdum ancak 500 SQL sorgusunu bir araya getirmek ve aynı getiriyi elde etmek istiyorum (şirketler ve kullanıcıların sayısı her şirket) PHP koduBir SQL sorgusuna SQL sorgularını birleştirme

$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; 

Örnek I

Sorgu 1

01 birleştirmek istediğiniz 2 SQL sorguları içinde

Örnek

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

Sorgu 2

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

Ben createQueryBuilder http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-using-doctrine-s-query-builder kullanarak bir çözümü tercih ancak bir SQL yerli sorgusu ile de mutluyum.

+0

koyun tüm 'bir diziye LIKE '% @ somecompany.com'' koşulları u0_.email ve OR'' ile birleştirme. – syck

+0

Emin değilim, ancak 'u0_.email LIKE'% @ somecompany.com 'koşullarının tümünü bir diziye koyarsam ve "OR" ile birleştirirseniz. Elde edeceğim sonuç, herhangi bir şirketteki kullanıcı sayısıdır. Örneğin toplamda 4 kullanıcı. Bu sonucu istiyorum: 2 Kullanıcılar Company1 ve 2 Kullanıcılar Company2. –

+0

http://stackoverflow.com/questions/15230350/how-to-combine-results-of-two-queries-into-a-single-dataset – WebInsight

cevap

1

kullanımı koşullu birleştirilmesi:

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_ 
İlgili konular