如何在Drupal中执行MySQL原生查询并转换对应SQL语句
Drupal框架下对应查询实现方案
能否使用db_query实现?
可以,该子查询场景完全兼容db_query方法,使用时只需要遵循Drupal数据库操作的两个基础规范即可:
- 表名用大括号
{}包裹,让系统自动适配站点配置的数据库表前缀 - 动态参数用占位符传递,禁止直接拼接变量到SQL语句中,避免SQL注入风险
具体实现代码
写法1:直接使用db_query执行(推荐,简洁高效)
适合查询逻辑固定的场景,直接写原生SQL即可,代码如下:
$nid = 20339; $total_visits = db_query(" SELECT SUM(visits) AS totalvisits FROM ( SELECT visits FROM {dip_website_visits} WHERE nid = :nid ORDER BY date DESC LIMIT 12 ) AS sub_table ", [':nid' => $nid])->fetchField();
执行后$total_visits就是你需要的、指定节点最新12条访问记录的访问量总和。
写法2:使用动态查询APIdb_select实现
适合后续需要动态调整查询条件、排序规则、取值数量的场景,不需要手写SQL拼接逻辑:
$nid = 20339; // 构建内层子查询:取指定节点按时间倒序的最新12条访问记录 $sub_query = db_select('dip_website_visits', 'dv') ->fields('dv', ['visits']) ->condition('nid', $nid) ->orderBy('date', 'DESC') ->range(0, 12); // 基于子查询结果做聚合求和 $total_visits = db_select($sub_query, 'st') ->addExpression('SUM(st.visits)', 'totalvisits') ->execute() ->fetchField();
两种写法返回结果完全一致,可根据实际业务场景选择。
内容的提问来源于stack exchange,提问作者user1280660
相关产品推荐
相关产品推荐

