私は WordPress を使用していますが、この質問は関連する SQL に関連しています。必要があれば喜んで動かします。
私はhttp://www.libertyguide.com/jobsに取り組んでおり、フィルタリングの仕組みを変更しようとしています。現在、それはグローバルOR
クエリです。
とにかく、私は 3 つのフィルタリング リストを持っており、次の方法で、選択したものを 3 つの文字列 (興味、タイプ、経験) に格納しています。
"( $wpdb->terms.slug = 'webdevelopment' OR $wpdb->terms.slug = 'journalism' OR ... ) AND"
フィルタリング リストで選択されたものによって入力されます。
結局のところ、私はこれを基本的なクエリとして持っています(私は省略していますLEFT JOINS
):
前:
SELECT * FROM $wpdb->posts WHERE ($wpdb->terms.slug = 'fromlist1'
OR $wpdb->terms.slug = 'fromlist2' OR $wpdb->terms.slug = 'fromlist3')
AND $wpdb->term_taxonomy.taxonomy = 'jobtype'...
後:
SELECT * FROM $wpdb->posts WHERE
($wpdb->terms.slug = 'fromlist1' OR $wpdb->terms.slug = 'fromlist1again')
AND ($wpdb->terms.slug = 'fromlist2' OR $wpdb->terms.slug = 'fromlist2again')
AND ($wpdb->terms.slug = 'fromlist3' OR $wpdb->terms.slug = 'fromlist3again')
AND $wpdb->term_taxonomy.taxonomy = 'jobtype'...
だから本質的に私はから行きたいです
OR
フィルター
に
AND
フィルタリングを間に挟んだフィルターOR
。
私の新しいフィルタリングは、1 つの項目全体が選択された場合にのみ機能しますが、複数の項目を選択した場合は何も返されません (いくつかの投稿と一致することがわかっています)。
ロジックを考えてみましたが、何も問題はありません。他に何も問題がないことはわかっているので、クエリ自体である必要があります。
正しい方向への一歩は大歓迎です。ありがとう!
更新 混乱から、基本的に私はこれを持っています:
"SELECT ...... WHERE $terms ..."
でも私はしたい
"SELECT ....... WHERE $interests AND $type AND $experience"
フィルターをかけたくない$interest[1] OR $interest[2] OR $type[1] OR $experience[1]
が、代わりにフィルターをかけたい($interest[1] OR $interest[2]) AND ($type[1]) AND ($experience[1])
これがより理にかなっていることを願っています
*更新 2 *
ここに例があります:
私の関心リストでは、たとえば、Web 開発、学問、ジャーナリズムの 3 つを選択します。
私のタイプ リストでは、フルタイム、パートタイムの 2 つを選択します。
私の経験リストでは、Earlycareer、Midcareer、Latecareer の 3 つを選択します。
クエリを実行するとき、各レコードに 3 つのリストのそれぞれが少なくとも 1 つ含まれていることを確認したいと考えています。考えられる結果: (Web 開発、パートタイム、中途採用)、(アカデミア、フルタイム、アーリーキャリア、中途採用)。
結果ではない: (ジャーナリズム、初期のキャリア) - フルタイムまたはパートタイムを欠席
これでもっとすっきりすることを願っています。これを正しく機能させることができれば、喜んで補償します。