2011-01-07 22 views
1

我使用了一個名爲「kf most read」的wordpress插件,它存儲了閱讀帖子的次數,並且可以輸出大多數閱讀帖子的列表。修改WordPress的SQL查詢從一個類別內拉動

這效果很好。問題是,我試圖拉取最多的閱讀文章,但只閱讀您正在閱讀的當前類別中閱讀最多的文章。

當我提到sql時,我很接近無知。

這裏我們目前的插件使用拉最讀讀帖子的內容:

$ SQL =「SELECT COUNT(mr.post_ID)作爲totHits,p.ID,p.post_title從$ wpdb- > posts p JOIN {$ wpdb-> prefix} kf_most_read 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'」;

任何關於此的幫助將不勝感激。

+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 

和你的額外條款

-- 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,你只能有一個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" 

取決於你喜歡你的換行符。希望工程!

其實我懷疑你不是真的想爲類別/分類表中的左連接,而應該有一個簡單的JOIN。但我不是WP架構專家。