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_values
是1
、2
和3
。所以,每个值都写一篇文章。
如何使用单个 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)
SQL:Wordpress 用户按最新发布日期 (CPT) 排序