我正在开发一个网站,使用 Drupal 7
. 我使用了一个查询,借助于函数 db_query
. 但现在我正计划对其进行重组并使用 db_select
格式。
但在某一部分,我使用的是
FORCE INDEX()
强制使用某个特定的指数,以克服旧有指数的缺点。MySql
版本。
有什么办法可以将这个力指数与 join()
在db_select中?
我也需要为视图定制查询(带强制索引)。我是这样做的。
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;
}
}