【问题标题】:Drupal db_select PDO Statement: ORDER BY CASEDrupal db_select PDO 语句:ORDER BY CASE
【发布时间】:2013-06-21 09:12:24
【问题描述】:

您好,我写了一个 MySQL 语句,它有一个条件 order by 子句,您可以在下面的示例中看到。

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 部分的正确方向?

【问题讨论】:

    标签: php mysql drupal pdo drupal-7


    【解决方案1】:

    我认为您可以通过在 select 语句中添加一个表达式,然后将该字段添加为 order by 字段来做到这一点。仅当您可以在选择列表中拥有额外字段时,这才有效。这将像这样工作:

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

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

    【讨论】:

    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多