我正在使用 Wordpress 和 MySQL,我有以下查询
SELECT COUNT(p.ID)
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS t1
ON t1.post_id = p.ID
AND t1.meta_key = 'followers_count'
LEFT JOIN
(SELECT tt.term_id,tr.object_id
FROM wp_term_relationships AS tr
INNER JOIN wp_term_taxonomy AS tt
ON tt.term_taxonomy_id = tr.term_taxonomy_id
AND tt.taxonomy='paises'
) as terms
ON p.ID=terms.object_id
INNER JOIN
(SELECT meta_value,tt.term_id
FROM wp_postmeta AS t1
LEFT OUTER JOIN wp_term_relationships AS tr
ON t1.post_id=tr.object_id
INNER JOIN wp_term_taxonomy AS tt
ON tt.term_taxonomy_id = tr.term_taxonomy_id
AND tt.taxonomy='paises'
WHERE t1.post_id = 80
AND t1.meta_key = 'followers_count'
) AS f
ON p.post_type='post'
AND p.post_status='publish'
AND t1.meta_value>f.meta_value
AND terms.term_id=f.term_id
基本上我在这里做的是从术语表中获取帖子国家,从 wp_postmeta 表中获取 follower_count。所以我们有 4 个连接表。
我想使用followers_count获得该帖子在指定国家/地区的排名,这是最后一个子查询。
它现在可以工作了,但我觉得它可以改进,因为我正在选择所有帖子及其对应的国家和追随者,然后我再次查询相同的表以从我选择的帖子中获取国家和追随者数量(在此为 80 case) 所以我将第一个查询限制在那个国家。
我尝试了临时表,但我不能在同一个查询中多次使用它,而且 MySQL 中不存在 CTE,所以我这样做了。
有没有办法改进这一点或缩小查询一点,而不是我想学习更多的性能。