Учение QueryBuilder из с подзапросом - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно написать сложное выражение для построения запросов.Sql выглядит так:

SELECT query,popularity,nb_words
FROM gemini_suggestion    
WHERE query IN    
(
    SELECT * FROM    
    (   
        SELECT query    
        FROM gemini_suggestion    
        GROUP BY query    
        HAVING COUNT(query) > 1    
    ) AS subquery    
);

Код, по которому я застрял:

$queryBuilder = $em->createQueryBuilder();
$queryBuilder->select('a')
    ->from($this->entity['class'], 'a')
    ->where($queryBuilder->expr()->In('a.query', $subQuery->getDQL()));

$subQuery2 = $em->createQueryBuilder()
    ->select('b.query')
    ->from($this->entity['class'], 'b')
    ->groupBy('b.query')
    ->having('count(b.query)>1')
;

$subQuery = $em->createQueryBuilder();
$subQuery->select('a')
    ->from(...)
;

Любая помощь будет полезна!

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете попробовать что-то вроде этого.Я предполагаю, что у вас есть пространство имен Entities, где у вас есть все ваши классы сущностей.

// Subquery to get the queries greater than 1
$subQueryBuilder = $this->entityManager->createQueryBuilder();
$subQueryBuilder->select('gemini_suggestion.query')
                ->from('Entities\gemini_suggestion', 'gemini_suggestion')
                ->groupBy('gemini_suggestion.query')
                ->having($subQueryBuilder->expr()->gt('COUNT(gemini_suggestion.query)', 1));

// Main query where you use the subquery to filter out the records you want
$queryBuilder = $this->entityManager->createQueryBuilder();
$queryBuilder->select('query, popularity, nb_words')
             ->from('Entities\gemini_suggestion', 'gemini_suggestion')
             ->where($queryBuilder->expr()->in('gemini_suggestion.query', $subQueryBuilder->getDQL()));

$result = $queryBuilder->getQuery()->getResult();
return $result;
...