Wordpress 自定义 SQL 以获取三个具有给定元值的帖子

Posted

技术标签:

【中文标题】Wordpress 自定义 SQL 以获取三个具有给定元值的帖子【英文标题】:Wordpress custom SQL to fecth three posts with given meta values 【发布时间】:2013-02-18 09:49:46 【问题描述】:

我有一堆带有元键footer_element_meta_alignment 的自定义帖子类型页脚元素。现在,我正在尝试获取三个最新的帖子,meta_values123。所以,每个值都写一篇文章。

如何使用单个 SQL 查询实现这一目标?

这是我目前的 SQL 查询:

"SELECT wposts.*, meta1.meta_value
FROM $wpdb->posts wposts, $wpdb->postmeta meta1
WHERE 1=1
AND wposts.post_type = 'footer_element'
AND wposts.post_status = 'publish'
AND wposts.ID = meta1.post_id
AND meta1.meta_key = 'footer_element_meta_alignment'
AND (meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3)
ORDER BY meta1.meta_value ASC";

然而,这会获取所有具有给定元值的元素,而不仅仅是最新的。

回答 回答了我自己的问题。

【问题讨论】:

【参考方案1】:

已修复(我希望如此)。

 SELECT wposts.* FROM $wpdb->posts wposts WHERE
 wposts.post_type = 'footer_element'
 AND wposts.post_status = 'publish'
 AND wposts.ID IN 
 (SELECT max(meta1.post_id) FROM $wpdb->postmeta meta1
 WHERE meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3
 GROUP BY meta1.meta_value)

【讨论】:

这给了我一个 SQL 错误,如果我删除 as q 它不会,但它也不会找到任何帖子 @micadelli 哦,对了,不需要别名,因为它不是子查询。它应该是 count()=3 而不是 count()>3。我想我应该更多地关注代码。 @micadelli 和SELECT meta1.post_id, count(*) FROM $wpdb->postmeta meta1 WHERE meta1.meta_value = 1 OR meta1.meta_value = 2 OR meta1.meta_value = 3 GROUP BY meta1.post_id 的结果是什么? @micadelli 等一下。我误读了你。我认为它应该搜索具有所有三个标签的帖子,而不是三个帖子,每个帖子都有一个标签。给我一点时间。 还是不行!它只找到两个最旧的元素,一个元值为 2,另一个元值为 3。【参考方案2】:

经过几个小时的努力,我找到了解决方案。

SQL

"SELECT *
 FROM (  SELECT p.*, m.meta_value AS meta
         FROM $wpdb->posts AS p
         LEFT JOIN $wpdb->postmeta AS m
         ON p.ID = m.post_id
         WHERE m.meta_key = 'footer_element_meta_alignment'
         AND p.post_status = 'publish'
         ORDER BY m.meta_value ASC, p.post_date DESC) AS h
 GROUP BY meta";

【讨论】:

以上是关于Wordpress 自定义 SQL 以获取三个具有给定元值的帖子的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress:以正确的语言获取自定义字段值 (WPML)

从数据库自定义表中获取值不在wordpress中工作

SQL:Wordpress 用户按最新发布日期 (CPT) 排序

wordpress 搜索表单 sql 查询

具有自定义 php.ini 文件设置的 Docker Wordpress 容器

如何从 WordPress 数据库中获取高级自定义字段字段键?