使用drupal查询生成器添加FORCE INDEX。

问题描述 投票:0回答:1

我正在开发一个网站,使用 Drupal 7. 我使用了一个查询,借助于函数 db_query. 但现在我正计划对其进行重组并使用 db_select 格式。

但在某一部分,我使用的是

FORCE INDEX()

强制使用某个特定的指数,以克服旧有指数的缺点。MySql 版本。

有什么办法可以将这个力指数与 join() 在db_select中?

drupal drupal-7 force-index
1个回答
0
投票

我也需要为视图定制查询(带强制索引)。我是这样做的。

A] 创建 SelectQueryExtender 阶层

class CustomSQLQuery extends SelectQueryExtender
{

    private $customQuery;
    private $args;

    static function query($query, $args) {
        $inst = new CustomSQLQuery(db_select('node', 'n'), Database::getConnection());
        $inst->setQuery($query, $args);
        return $inst;
    }

    public function setQuery($query, $args) {
        $this->customQuery = $query;
        $this->args = $args;
    }

    public function execute()
    {
        if (!$this
            ->preExecute()) {
            return null;
        }

        return $this->connection
            ->query((string)$this->customQuery, $this->args);

    }

}

B]使用该扩展器在 hook_pre_execute(&$view). 例如:

function yourmodule_views_pre_execute(&$view) {

  if ($view->current_display == "xyz") {
     $rawQuery = "SELECT something where field = :arg1 ";
     $q = CustomSQLQuery::query($rawQuery, [
                ":arg1" => "foo"
            ]);
     $view->build_info['query'] = $q;
     $view->build_info['count_query'] = $q;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.