从数据库查询中排除类别

时间:2016-04-25 作者:Bphoenix

我有下一个代码:

$drivers_all = $wpdb->get_results("SELECT DISTINCT meta_value FROM wp_postmeta WHERE meta_key = \'driver\'")
通过这个,我得到了所有字段“driver”的值。如何在此代码中排除某些类别?

1 个回复
SO网友:Rup

我相信有更好的方法,但此查询应该满足您的需要:

SELECT DISTINCT meta_value FROM wp_postmeta pm
  WHERE meta_key = \'Driver\'
    AND NOT EXISTS (SELECT * FROM wp_term_relationships tr
                      JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
                      JOIN wp_terms t ON t.term_id = tt.term_id
                    WHERE pm.post_id = tr.object_id
                      AND tt.taxonomy = \'category\'
                      AND t.name = \'ExcludeMeCategory\');
将其转换为php时,应使用$wpdb 表名称的别名,即。$wpdb->postmeta, $wpdb->term_relationships, $wpdb->term_taxonomy, $wpdb->terms. 您可能还应该分析这个查询,以确保它在合理的时间内执行,并且没有进行全表扫描,等等。我手头没有一个具有代表性的数据库来测试它。

最后,我不太了解分类法:这可能是不完整的w.r.t.例如,分类法层次结构,首先查询分类法ID,然后将其放入查询中以代替wp_terms_taxonomy 在查询中向前。

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!