1

こんにちは、以下の例でわかるように、条件付きの order 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 セクションをどのように記述するかについて、誰かが正しい方向に向けることができますか?

4

1 に答える 1

4

selectステートメントに式を追加し、そのフィールドをorder byフィールドとして追加することでこれを行うことができると思います。これは、選択リストに余分なフィールドがあっても問題ない場合にのみ機能します。これは次のように機能します。

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

orderBy 句で具体的に式を使用できるとは思いませんが、これでうまくいくはずです。

于 2013-06-21T16:14:12.280 に答える