2011-01-07 7 views
1

私は、 "kf most read"というワードプレスプラグインを使用しています。これは、投稿が何回読み取られたかのカウントを保存しています。Wordpress SQLクエリをカテゴリ内からプルするように修正する

これはうまくいきます。問題は、現在読んでいるカテゴリの中で最も読んだ投稿のみを読み込もうとしています。

SQLに関しては、私は無知に近いです。

ここで私たちのプラグインは、現在ほとんどが記事を読んで引っ張るために使用されているもの:

$ sqlを=「SELECT COUNT(mr.post_ID)$ wpdb-からtotHits、p.ID、p.post_titleなどを> GROUP BY mr.post_ID()()()(時間() - (86400 * $ピリオド)) "GROUP BY mr.post_ID totHits desc、ID ASC LIMIT $ limitによる注文 ";

どのように特定のカテゴリから上記のクエリを組み込むことができますか? 。

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

これについてのヘルプは大歓迎です。

+0

ここでは、http://wordpress.stackexchange.com/をwordpressの集中コミュニティとして運が良いかもしれません – Robb

答えて

2

from + joinセクションと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 

で、あなただけのように第2の加算1 whereを持つことができ、あなたの余分な句は

-- 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 

(NBする必要があります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" 

あなたの改行の使い方によっては、それがうまくいくこと!

実際には、あなたはカテゴリ/タクソノミーテーブルの左ジョイントを本当に望んでいないと思われますが、代わりにプレーンJOINが必要です。しかし私はWPスキーマの専門家ではありません。

関連する問題