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スキーマの専門家ではありません。
出典
2011-01-07 15:42:35
Rup
ここでは、http://wordpress.stackexchange.com/をwordpressの集中コミュニティとして運が良いかもしれません – Robb