php - 返回元值等于的帖子数

标签 php mysql wordpress

我使用高级自定义字段插件创建了一个自定义字段。该字段称为“状态”,默认情况下等于“即将到来”,然后它将更改为正确或错误。

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

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

最佳答案

您应该使用括号将应该放在一起的内容组合在一起:

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)

关于php - 返回元值等于的帖子数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417553/

相关文章:

php - Docker 容器上的 Couchbase PHP SDK 2.6

php - 密码哈希/登录

php - PDO 支持多个查询(PDO_MYSQL、PDO_MYSQLND)

php - MySQL 多个表中的公共(public)列名

php - 在指定时间后更新 mySQL 行(PHP、MySQL)

javascript - 如何删除/覆盖标记为 !important 的元素属性的 CSS

javascript - AJAX 刷新后按钮不起作用的 Woocommerce 数量增量,并且自动加载仅在点击 2 次后触发

php - 使用 CakePHP 如何从数据库中导出数据。不包括架构

php - 如何使用 PHP 检索带前导零的 MySQL ID

css - 在 CSS 代码中的哪个位置可以编辑紫藤模板上的帖子边距?