クエリに追加された不要な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]);
}
}
グループ化できないことに関連するエラーが発生しました
コメント数
実際には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]);
}
}
}
}