Drupal的DB API中的If-Else-Order-by子句

Drupal的DB API中的If-Else-Order-by子句,drupal,drupal-7,drupal-database,Drupal,Drupal 7,Drupal Database,我有Drupal7网站。我正在使用Drupal的dbApi。现在我有一个查询,我需要在哪里订购记录 表结构:- 白蛋白 唱片集名称 相册创建日期 专辑发行日期 现在我的要求是,如果相册发行日期不为空,则按它排序,否则使用相册创建日期进行排序 $query = db_select('node', 'n'); $query->condition('n.type', 'albums', '=') ->condition('status', 1) //Published.

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

表结构:-

  • 白蛋白
  • 唱片集名称
  • 相册创建日期
  • 专辑发行日期
现在我的要求是,如果
相册发行日期
不为空,则按它排序,否则使用
相册创建日期
进行排序

$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();

非常感谢您的帮助。

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


没有测试这个,所以您可能需要对它进行调整,但事实是您可以使用addExpression插入sql函数,如min-max或在您的例子中的if。

这只能通过db_查询(“您的带条件的查询”)实现;
$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();