您需要將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架構專家。
來源
2011-01-07 15:42:35
Rup
你可能在這裏有更好的運氣http://wordpress.stackexchange.com/作爲其專注於wordpress的社區 – Robb