Drupal的db_select PDO声明:ORDER BY CASE(Drupal db_sel

2019-10-18 06:55发布

您好我写了一个具有by子句条件定单您可以在下面的例子中看到一个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

我现在想重新使用它的PDO风格db_select()函数在Drupal这一说法。 可是我在写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部分朝着正确的方向?

Answer 1:

我想你可以通过在SELECT语句中加入一个表达式,然后添加该字段由字段的顺序做到这一点。 这如果你都OK只会工作,具有在选择列表中的额外领域。 这工作是这样的:

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

我不认为你可以专门的排序依据子句中使用表达式,但是这应该为你工作。



文章来源: Drupal db_select PDO Statement: ORDER BY CASE