2015-02-09 72 views
0
的帖子数

我已经使用高级自定义字段插件创建了自定义字段。这个字段被称为状态,默认情况下等于即将到来,然后它将在以后更改为正确或错误。返回元值等于

我然后试图查询状态元值等于正确或错误的所有帖子。不过,即使我已经在下面的查询中设置了它,它仍然会返回所有帖子的计数。我已经仔细检查并计算了有多少帖子等于正确或错误,但仍然得到错误的数量。我究竟做错了什么?

SELECT count(DISTINCT posts.ID) as count, AVG(odds.meta_value) as ave 
    FROM $wpdb->posts posts 
    LEFT JOIN $wpdb->postmeta stat 
      ON posts.ID = stat.post_id 
      AND stat.meta_key = 'status' 
    LEFT JOIN $wpdb->postmeta odds 
      ON posts.ID = odds.post_id 
      AND odds.meta_key = 'odds' 
    LEFT JOIN $wpdb->term_relationships tr ON posts.ID = tr.object_id 
    LEFT JOIN $wpdb->term_taxonomy t ON tr.term_taxonomy_id = t.term_taxonomy_id 
    WHERE stat.meta_value = 'wrong' 
    OR stat.meta_value = 'correct' 
    AND posts.post_status  = 'publish' 
    AND t.taxonomy = 'category' 
    AND t.term_id = 4 
    OR t.term_id = 5 
    OR t.term_id = 6 
+0

更改您的WHERE AND,还您可能想要在那些一些括号或OR条件.. – Mihai 2015-02-09 19:20:53

+0

然后返回115这是实际职位以上的方式 – 2015-02-09 19:22:28

回答

0

你应该用括号组合在一起应该是什么在一起:

SELECT count(DISTINCT posts.ID) as count, AVG(odds.meta_value) as ave 
FROM $wpdb->posts posts 
LEFT JOIN $wpdb->postmeta stat 
    ON posts.ID = stat.post_id 
    AND stat.meta_key = 'status' 
LEFT JOIN $wpdb->postmeta odds 
    ON posts.ID = odds.post_id 
    AND odds.meta_key = 'odds' 
LEFT JOIN $wpdb->term_relationships tr 
    ON posts.ID = tr.object_id 
LEFT JOIN $wpdb->term_taxonomy t 
    ON tr.term_taxonomy_id = t.term_taxonomy_id 
WHERE (stat.meta_value = 'wrong' 
    OR stat.meta_value = 'correct') 
    AND posts.post_status  = 'publish' 
    AND t.taxonomy = 'category' 
    AND (t.term_id = 4 
    OR t.term_id = 5 
    OR t.term_id = 6)