您好我已经编写了一个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
我现在尝试使用其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部分的正确方向吗?
答案 0 :(得分:4)
我认为你可以通过在select语句中添加一个表达式,然后将该字段作为order by字段添加来实现。只有在选择列表中有额外字段时,这才有效。这将是这样的:
$query->addExpression('CASE WHEN title LIKE "%keyword%" THEN 1 ELSE 2 END', 'order_col');
$query->orderBy('order_col', 'ASC');
我认为你不能在orderBy子句中专门使用表达式,但这应该适合你。