我正在使用 WordPress,但这个问题更与所涉及的 SQL 有关。如果需要,我会很乐意移动它。
我正在研究http://www.libertyguide.com/jobs,并且正在尝试更改过滤机制。目前它是一个全局OR
查询。
无论如何,我有三个过滤列表,我通过以下方式将选择的内容存储到三个字符串(兴趣、类型、经验)中:
"( $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
。
我的新过滤仅在整体选择一项时有效,但当我选择多于一项时(我知道会与几篇文章匹配),则不返回任何内容。
我已经仔细考虑了逻辑,我认为它没有任何问题。我知道其他任何事情都没有问题,所以它必须是查询本身。
朝着正确方向迈出的任何一步将不胜感激。谢谢!
更新 从混乱中,基本上我有这个:
"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 *
这是和示例:
在我的兴趣列表中,我选择了三件事:WebDevelopment、Academia、Journalism。
在我的类型列表中,我选择了两件事:全职,兼职
在我的经验列表中,我选择了三件事:Earlycareer、Midcareer、Latecareer。
当我运行查询时,我想确保每条记录至少包含三个列表中的每一个。可能的结果:(网络开发、兼职、职业中期)、(学术界、全职、早期职业、职业中期)。
不是结果:(新闻,早期职业) - 缺少全职或兼职
我真的希望这能更清楚。如果我能正常工作,我愿意给予补偿。