You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:09:25