如果在Drupal的DB API中按条款顺序排序

时间:2016-09-03 12:03:48

标签: drupal drupal-7 drupal-database

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

表格结构: -

  • ALBUMID
  • 专辑名称
  • 专辑创建日期
  • 专辑发布日期

现在我的要求是如果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();

任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。你应该使用addExpresion($ 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或者在您的情况下。