NEWS NEWSには次のようなフィールドがあるタイプのすべてのコンテンツを表示するビューがあります。
コンテンツ=タイトル
スケジューラ=発行
並べ替え条件:2つのオプションでコンテンツを並べ替えたい:スケジューラあり(発行日= DESC)と投稿日あり
スケジューラでコンテンツを並べ替えたいのですが、スケジューラフィールドが空の場合、投稿日で並べ替えます。フックビュークエリの変更を作成しましたが、問題があります。publish_onが空の場合に条件でフィールドを並べ替えて、postdateで並べ替える方法を教えてください
function custom_sort_views_query_alter(&$view, &$query) {
if($view->name === 'articleview') {
$view->query->add_where(1,'publish_on', 'NOT IN');
$view->query->orderby[0]['field'] = "CASE WHEN publish_on IS NULL THEN created ELSE publish_on END";
$view->query->orderby[0]['direction'] = "DESC";
$view->query->orderby[1]['field'] = "created";
$view->query->orderby[1]['direction'] = "DESC";
}
}
私の頭に浮かぶ解決策は、(質問のコメントの後に)2つのクエリを作成することです。1つは、publish_onフィールドが空で、もう1つはフィールドが空ではないレコードを使用して、それらの間でUNIONを使用します。
なんでこれ? AFAIKある条件に基づくクエリの一部のレコードと別の条件に基づく他のレコードを並べ替えることができないため、これを実現するには、レコードを分割して、並べ替え方法を個別に適用する必要があります。これは最初の条件のレコードとそれ以前の別の条件のレコードですが、レコードと注文条件をマージすることはできません。
多分この投稿はあなたを助けることができます:
https://stackoverflow.com/q/2258376/3653989
https://stackoverflow.com/q/19296047/3653989
https://stackoverflow.com/q/3730093/3653989
多分あなたも読みたいと思う http://www.w3schools.com/sql/sql_union.asp