쿼리에 불필요한 GROUP BY 문이 추가되어있는 경우에서에서 제거 할 수 있습니다 hook_query_alter()
. 예를 들어 대부분의 주석이 달린 부모 의견으로 주석을 주문하는 문제를 해결했습니다.
그래서 hook_views_query_alter()
나는 가지고있다 :
/**
* Implements hook_views_query_alter().
*/
function MODULENAME_views_query_alter(&$view, &$query) {
if ($view->name == 'reviews' && $query->orderby[0]['field'] == 'comment_thread') {
$join = new views_join;
$join->construct('comment', 'comment', 'cid', 'pid', NULL, 'LEFT');
$query->add_relationship('c1', $join, 'comment');
$query->add_field('comment', 'pid', 'c1_pid', array('function' => 'groupby'));
$query->add_groupby('c1.pid');
$query->add_orderby(NULL, 'COUNT(c1.cid)', 'DESC', 'comments_count');
$query->distinct = TRUE;
$query->orderby[0] = $query->orderby[count($query->orderby) - 1];
unset($query->orderby[count($query->orderby) - 1]);
}
}
그룹화 할 수없는 오류와 관련하여 오류가 발생했습니다.
comments_count
실제로 SQL COUNT()
함수 의 결과 인 필드입니다 .
나는 이것으로 끝났다.
/**
* Implements hook_query_alter().
*/
function MODULENAME_query_alter(QueryAlterableInterface $query) {
if (isset($query->alterMetaData['view']->name) && $query->alterMetaData['view']->name == 'reviews') {
$fields =& $query->getGroupBy();
foreach (array_keys($fields) as $key) {
// Remove group by statements from generated query which were actually not set in view query.
if (!in_array($key, $query->alterMetaData['view']->query->groupby)) {
unset($fields[$key]);
}
}
}
}