如何在代码中使用自定义SQL查询替换Views 3查询?
答案 0 :(得分:4)
据我了解,您可以使用hook_views_query_alter修改查询。我想你也可以用它来代替查询。以下是一些hook_views_query_alter示例,以帮助您入门:
答案 1 :(得分:1)
这可能不再与您相关,但是在Implementing custom SQL query for Views / Filters上Drupal.org上似乎是一个非常有用的讨论,看起来它正在回答我的类似问题。
特别是,最初的海报建议附加到钩子views_views_pre_execute
,其他人提到的可以放入自定义模块,如:
function mymodulename_views_pre_execute(&$view) {
if($view->name=="groups_list2") {
// ...
$view->build_info['query'] = "SELECT node.nid AS nid ".
"FROM node WHERE node.type='%s'"; // wrapped for legibility
}
}
另一张海报提到了mySQL Views和Table Wizard(direct link),虽然他们确实提到了它值得记住this article about mySQL Views performance
这绝对值得阅读Drupal.org上的整个帖子,因为我觉得它非常有用;我希望其他人也这样做。
更新:确实,这正是我们现在正在做的事情 - 在自定义模块中覆盖views_views_pre_execute
以在新SQL到达数据库之前注入新SQL。我在Slow query with large dataset in Drupal views — better to process in SQL or PHP?开了一个关于Drupal.SE的类似(但更具体)的问题,你可能觉得它很有用。
答案 2 :(得分:-2)
如果要执行自定义SQL(视图无法生成),例如计算字段或复杂的SQL连接,那么您所需要的是自定义模块。
请参阅drupal以获取入门指南