events
カスタム投稿タイプにはたくさんのイベントがあります。それぞれに関連付けられた以下のカスタムフィールドがあります。
start_date
end_date
フロントエンドには、ユーザーがイベントの検索方法を選択できるフィルタ付きサイドバーがあります(つまり、さまざまな分類法、町への旅行の開始日、終了日など)。 event_begin
とevent_end
の検索入力は、データベースへの問い合わせに使用するものです。
私は大まかに質問された結果を含む問題を抱えています。厳密な一致が表示されますが、プロジェクトの利害関係者は、検索が厳しすぎると言っています。ユーザーの検索フィルターでフロントエンドのevent_end
フィールドを放棄するという概念を提起しましたが、それが私にとってこの時点で必要なのかどうかはよくわかりません。
イベントを検索する場合は、次のようにmeta_query
を構造化できます。
しかし、私がこのようなフロントエンド検索をしたときはどうでしょうか。
event_begin
7/15/2016event_end
7/15/2016...ただし、データベースにカスタムフィールドのイベントが実際には1週間のイベントであることを示すイベントが2016年7月11日から2016年7月16日まであります。
上記のいずれも一致しないため、そのイベントは私のクエリから返されません。しかし技術的には、2016年7月15日(今日)に街にいる場合は、その日の営業中にそのイベントを見る(そしておそらく参加できる)はずです。
通常、イベントの範囲をシリーズの各日に別々の日付として保存することはしません。私たちは(人間として)日付範囲を保存します。だから私はこれにアプローチするいくつかの論理的な方法があると確信しています。私の検索や研究で何も思いつかないのです。
ご協力ありがとうございます。
このような複雑なケースで、データにアクセスできない場合、meta_query
コードで考えるのは少し難しいです。 :)
持っているもの作業しているものは、次の2つの条件として表すことができます。
start_date
BETWEEN event_begin
とevent_end
end_date
BETWEEN event_begin
とevent_end
両方の間にあるあなたの最初のケースは関係ないようです、これら2つはとにかくそれを捕まえるので。
残りの部分で抱えている課題は、リバースロジックが必要なことです - event_begin
またはevent_end
BETWEEN start_date
とend_date
。しかし、それらは各イベントに固有のものであるため、同じように表現することはできません。
しかし、がの場合は、実際には気にしないでください。検索日の前後にあるだけです。
そのため、さらに2つの条件を次のように表すことができます。
start_date
<= event_begin
)AND(end_date
> = event_begin
)(イベント開始日またはその前後)start_date
<= event_end
)AND(end_date
> = event_end
)(イベント終了日またはその前後)繰り返しますが、私はこれを「理論上の」メタクエリとして書くのに苦労しますが、メタクエリは入れ子にすることができるのであなたはこれらすべてを論理に詰め込むことができるはずです。
PSパフォーマンスが考慮事項になる可能性があり、単一の複雑なクエリではなく複数の単純なクエリの集計が必要になります。