【问题标题】:Drupal 7 - db_select: SQL function in where conditionDrupal 7 - db_select:条件条件下的 SQL 函数
【发布时间】:2018-04-21 17:48:27
【问题描述】:

我需要在我的选择语句中使用这个条件:

WHERE YEAR(date) = YEAR(CURDATE()) 

但如果我这样做,就像这样:

$query = db_select('table', 't');
$query->fields('t');
$query->condition('YEAR\(date\)', 'YEAR(CURDATE())', '=');

Drupal 不会有它(即使我没有逃避那些括号 - 它只是忽略它们)因为我收到一个错误:

Column not found: 1054 Unknown column 'YEARdate' in 'where clause':

如何克服这个错误?

【问题讨论】:

    标签: sql drupal drupal-7


    【解决方案1】:

    嗯..好像是这样的:

    $query->where('YEAR(date) = YEAR(CURDATE())');
    

    where 允许任意 SQL:

    where() 方法允许添加任意 SQL 作为条件片段。 $sn-p 可以包含任何合法的 SQL 片段,如果它具有可变内容,则必须使用命名占位符添加它。 $args 数组是一个由占位符和值组成的数组,它们将被替换到 sn-p 中。由开发人员确保 sn-p 是有效的 SQL。没有对 sn-p 进行特定于数据库的修改。

    【讨论】:

    • 使用 addExpression ,看我的帖子
    【解决方案2】:

    嗯,你也可以使用db_query,它允许你在“没有 Drupal”的情况下编写 SQL 查询。 我的意思是,您将能够添加自定义 WHERE 语句或任何 SQL 专有函数,例如自定义函数;)

    例如。

    $result = db_query('SELECT title FROM {node} WHERE type = "%s" AND title LIKE "%%%s%%"', 'type', 'title');

    【讨论】:

      【解决方案3】:

      使用addExpression 方法: https://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQuery%3A%3AaddExpression/7.x

      $query = db_select('table', 't');
      $query->fields('t');
      $query->addExpression('YEAR(t.date) = YEAR(CURDATE())');
      $result = $query->execute()->fetchAll();
      
      var_dump($result);
      

      【讨论】:

        猜你喜欢
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多