【问题标题】:If Else in Order by Clause in DB API of DrupalDrupal 的 DB API 中的 If Else in Order by Clause
【发布时间】:2017-01-11 09:54:41
【问题描述】:

我有Drupal 7 网站。我正在使用 Drupal 的dbApi。现在我有一个查询需要在哪里订购记录。

表结构:-

  • 专辑编号
  • 专辑名称
  • 专辑创建日期
  • 专辑发行日期

现在我的要求是如果Album Release Date 不为NULL,则按它排序,否则使用Album Created Date 进行排序。

$query = db_select('node', 'n');
$query->condition('n.type', 'albums', '=')
        ->condition('status', 1) //Published.
        ->fields('n', array('nid'))
        ->orderBy('field_album_release_date_value', 'DESC')
        ->execute();
$result = $query->execute();

非常感谢任何帮助。

【问题讨论】:

  • 只能通过 db_query("{your query with condition}");

标签: drupal drupal-7 drupal-database


【解决方案1】:

是的,这是可能的。您应该使用 addExpression($expression)。

$query = db_select('node', 'n');
$query->condition('n.type', 'albums', '=')
    ->condition('status', 1) //Published.
    ->fields('n', array('nid'));
$query->addExpression('IF(n.field_album_release_date_value is null,'
    . 'n.field_album_release_date_value, n.field_album_create_date_value)'
    . ' as available_date');
$query->orderBy('available_date', 'DESC');
$result = $query->execute();

没有对此进行测试,因此您可能需要对其进行调整,但事实是您可以使用 addExpression 插入 sql 函数,如 min max 或在您的情况下 if。

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多