2015-02-03 8 views
0

У меня есть запрос select в таблице Mysql для извлечения связанной таблицы с повторяющимися значениями в определенном столбце (дате). Это будет успешно отображать столбцы и внешние ключи, если они имеют повторяющиеся значения в column.Example две строки такое же значение (2014-11-10) в колонке ДатаПреобразование SQL-запроса в Doctrine 1.2 dql

mysql>select man_id,date_created,count(date_created) as count 
from collections 
group by man_id,date_created 
having count(date_created) > 1; 

Я хочу этот запрос, чтобы преобразовать в Doctrine запроса, так как я использую Symfony 1.4 в качестве основы

public function getDuplicateDatePayment() { 
    $q = $this->createQuery() 
       ->select('man_id','date_created','count(date_created) as count') 
       ->from('Collections') 
       ->groupBy('man_id','date_created') 
       ->having('COUNT(c.date_created) > 1'); 
     return $q->execute(); 
} 

SELECT c.id AS c__id, c.man_id AS c__man_id FROM collections c GROUP BY c.man_id HAVING count(c.date_created) > 1 //result 1 row 

Почему запрос доктрины не отображает результаты, как ожидалось? Как преобразовать указанную доктрину запрос, чтобы он отображал результат, похожий на SQL?

mysql command line

// результат 1141 строк

обновляют

Коллекции таблица связана с таблицей Человек в один ко многим relationship.Do я должен использовать innerJoin для этого?

+0

«почему доктрина запроса не отображает результаты, как ожидается,» --- они имеют разные 'GROUP BY', поэтому – zerkms

+0

они по-прежнему отличаются – zerkms

ответ

0

После двух дней попыток, в поисках ответа, я наконец нашел решение моей проблемы.

SELECT c.id AS c__id, c.man_id AS c__man_id FROM collections c GROUP BY c.man_id HAVING count(c.date_created) > 1 

Проблема выше результата SQL от доктрины, она не включает в себя «c.loan_id» в пункте GroupBy, даже если я включаю его в растворе GroupBy clause.The это, просто добавьте отделенный пункт addGroupBy. .И теперь его working.cheers ..

public function getDuplicateDatePayment() { 
$q = $this->createQuery() 
      ->select('c.man_id','c.date_created','count(c.date_created) as count') 
      ->from('Collections') 
      ->groupBy('c.man_id') 
      ->addGroupBy('c.date_created') 
      ->having('count(c.date_created) > 1'); 
    return $q->execute(); 

}