使用纯SQL查询按类别获取帖子

时间:2019-03-12 作者:chrispytoes

我有一个meeting post类型,其标题自动设置为表单的日期m/d/Y. 我有一个下面的查询,通过在最后一个之后选择不同的值,从帖子标题中获取所有唯一的年份/ 在帖子标题内。

SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts}
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
这将输出一个如下所示的数组["2019", "2018", "2017"].

我想做的是进一步细化,以便只考虑某个类别的帖子。

现在我知道下面的例子是错误的,因为类别实际上并不存储在帖子本身,但基本上我想按帖子类别进行优化,如下所示:

SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts}
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND post_category = \'some_cat_slug\'
此查询是关于我的SQL知识范围的,因此我不确定如何进行连接以按类别进行筛选。

编辑:澄清一下,这只是用于按年份生成分页按钮。所以简而言之,我正在努力寻找所有年份中至少有一个特定类别的会议帖子。如果可以这样做WP_Query 只是,我很乐意听你这么说。

编辑2:我通过在标题中存储帖子类别解决了我的问题。如果有人想回答,我就把这个放在这里。

1 个回复
SO网友:HU ist Sebastian

如果您希望能够按名称获取类别,这应该可以:

SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->term_relationships} rel ON rel.object_id = p.ID
LEFT JOIN {$wpdb->term_taxonomy} tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN {$wpdb->terms} t ON t.term_id = tax.term_id
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND t.name = \'Category Name\'
AND tax.taxonomy = \'category\'
如果您知道类别的term\\u taxonomy\\u id(主要但不总是term\\u id),则可以通过较少的左连接来完成此操作,如下图所示:

SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->term_relationships} rel ON rel.object_id = p.ID
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND rel.term_taxonomy_id = <term_taxonomy_id of your category>
快乐的编码!

相关推荐

Query post with content only

我需要循环浏览最后3篇帖子movie, 但只有那些内容不是空的。当我使用ACF编辑器而不是本机编辑器时,我通常会这样做。movie-content 指所见即所得字段的段塞。$args = array( \'posts_per_page\' => 3, \'post_type\' => \'movie\', \'meta_query\' => array( array( \'key\' => \'movie-co