The*_*lis 1 php mysql pdo drupal drupal-7
您好,我编写了一条 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
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用其 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();
Run Code Online (Sandbox Code Playgroud)
谁能指出我如何编写 ORDER BY 部分的正确方向?
我认为您可以通过在 select 语句中添加表达式,然后将该字段添加为 order by 字段来实现此目的。仅当您同意在选择列表中包含额外字段时,这才有效。这会像这样工作:
$query->addExpression('CASE WHEN title LIKE "%keyword%" THEN 1 ELSE 2 END', 'order_col');
$query->orderBy('order_col', 'ASC');
Run Code Online (Sandbox Code Playgroud)
我认为您不能在 orderBy 子句中专门使用表达式,但这应该对您有用。
归档时间: |
|
查看次数: |
3403 次 |
最近记录: |