首页 文章

修改Wordpress SQL查询以从类别中提取

提问于
浏览
1

我正在使用一个名为“kf most read”的wordpress插件,它存储了一个帖子读取次数的计数,并允许您输出大多数阅读帖子的列表 .

这很好用 . 问题是,我试图提取最多的阅读帖子,但只有你正在查看的当前类别中阅读量最多的帖子 .

当涉及到sql时,我几乎无能为力 .

这里是我们插件当前使用什么来拉最多阅读帖子:

$ sql =“SELECT count(mr.post_ID)as totHits,p.ID,p.post_title from $ wpdb-> posts p JOIN {$ wpdb-> prefix} kf_most_read mr on mr.post_ID = p.ID mr . hit_ts> ='“ . (time() - (86400 * $ period)) . ''GROUP BY mr.post_ID order by totHits desc,ID ASC LIMIT $ limit”;

我怎样才能将以下查询从特定类别中提取到上面呢?

$ sql . =“LEFT JOIN $ wpdb-> term_taxonomy ON($ wpdb-> term_relationships.term_taxonomy_id = $ wpdb-> term_taxonomy.term_taxonomy_id)”; $ sql . =“WHERE $ wpdb-> term_taxonomy.term_id IN($ currentcat)”; $ sql . =“AND $ wpdb-> term_taxonomy.taxonomy ='category'”;

对此的任何帮助将不胜感激 .

1 回答

  • 2

    您需要将from连接部分合并在一起,并将where子句合并在一起 . 你的原始查询是

    SELECT  count(mr.post_ID) as totHits, p.ID, p.post_title
    -- from & join
      FROM  $wpdb->posts p
      JOIN  {$wpdb->prefix}kf_most_read mr
        ON  mr.post_ID = p.ID
    -- where
      WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'
    -- group, etc.
    GROUP BY mr.post_ID
    ORDER BY totHits desc, ID ASC LIMIT $limit
    

    和你的额外条款

    -- from & join
    LEFT JOIN $wpdb->term_taxonomy
        ON  ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    -- where
      WHERE $wpdb->term_taxonomy.term_id IN ($currentcat)
        AND $wpdb->term_taxonomy.taxonomy = 'category'
    

    所以合并的查询应该是

    SELECT  count(mr.post_ID) as totHits, p.ID, p.post_title
    -- from & join
      FROM  $wpdb->posts p
      JOIN  {$wpdb->prefix}kf_most_read mr
        ON mr.post_ID = p.ID
    LEFT JOIN $wpdb->term_taxonomy
        ON  ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    -- where
      WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'
        AND $wpdb->term_taxonomy.term_id IN ($currentcat)
        AND $wpdb->term_taxonomy.taxonomy = 'category'
    -- group, etc.
    GROUP BY mr.post_ID
    ORDER BY totHits desc, ID ASC LIMIT $limit
    

    (注意,你只能有一个 where 所以将第二个添加为 and
    就像这样的东西

    $sql = "SELECT count(mr.post_ID) as totHits, p.ID, p.post_title FROM  $wpdb->posts p"
    $sql .= " JOIN  {$wpdb->prefix}kf_most_read mr ON mr.post_ID = p.ID"
    $sql .= " LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)"
    $sql .= " WHERE mr.hit_ts >= '".(time() - ( 86400 * $period))."'"
    $sql .= " AND $wpdb->term_taxonomy.term_id IN ($currentcat)"
    $sql .= " AND $wpdb->term_taxonomy.taxonomy = 'category'"
    $sql .= " GROUP BY mr.post_ID ORDER BY totHits desc, ID ASC LIMIT $limit"
    

    取决于你喜欢你的换行符 . 希望有效!

    实际上我怀疑你真的不想要类别/分类表的LEFT JOIN,而应该有一个简单的JOIN . 但我不是WP模式专家 .

相关问题