Drupal db_select PDO语句:按大小写排序


Drupal db_select PDO Statement: ORDER BY CASE

你好,我写了一个MySQL语句,有一个条件排序子句,你可以在下面的例子中看到。

MySQL的例子:

SELECT 
    title, 
    description
FROM books
WHERE 
    title LIKE "%keyword%" OR description LIKE "%keyword%"
ORDER BY 
    CASE 
        WHEN title LIKE "%keyword%"
        THEN 1
        ELSE 2
     END

我现在尝试在Drupal中使用它的PDO样式的db_select()函数重新创建这个语句。但是我在写ORDER BY子句时卡住了。

Drupal的例子:

 $node_select = db_select('node', 'n');
 $node_select->fields('n', array('title', 'description'));
 $node_select->condition(
     db_or()->condition('n.title', '%'.$keyword.'%', 'LIKE')
            ->condition('n.description', '%'.$keyword.'%', 'LIKE')
 );
 $node_select->order();

有谁能告诉我如何写ORDER BY部分的正确方向吗?

我认为您可以通过在select语句中添加表达式,然后将该字段添加为按字段排序来实现这一点。这将只工作,如果你确定有额外的字段在选择列表。这将像这样工作:

$query->addExpression('CASE WHEN title LIKE "%keyword%" THEN 1 ELSE 2 END', 'order_col');
$query->orderBy('order_col', 'ASC');

我不认为您可以在orderBy子句中专门使用表达式,但这应该适合您。