gpt4 book ai didi

mysql - 用于获取自定义帖子类型和可选分类法的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 21:14:51 25 4
gpt4 key购买 nike

我正在使用一个强大的低级插件 ( Exports and Reports ) 从 Wordpress 中提取内容报告。它使用原始 SQL 查询来在单个表中提取有关我的自定义帖子类型的所需数据。

考虑到 Wordpress 的表结构,特别是围绕分类信息,需要进行大量的 JOIN 操作来提取单个表以导出。

这是一个简化版本(真正的版本有 3 个分类法和 3 个元值)。

SELECT p.post_title,
GROUP_CONCAT(DISTINCT type_terms.name) type,
pdf_posts.guid pub_url
FROM
wp_posts p
INNER JOIN wp_term_relationships tr_type ON p.ID=tr_type.object_id
INNER JOIN wp_term_taxonomy tax_type ON tr_type.term_taxonomy_id = tax_type.term_taxonomy_id
INNER JOIN wp_terms type_terms ON tax_type.term_id = type_terms.term_id

INNER JOIN wp_postmeta meta_attachment ON meta_attachment.post_id = p.ID
INNER JOIN wp_posts pdf_posts ON meta_attachment.meta_value = pdf_posts.ID

WHERE 1=1
AND p.post_type = 'pressmention'
AND tax_type.taxonomy = 'pm_type'
AND meta_attachment.meta_key = 'pm_pdf_link'
GROUP BY
p.ID

该查询有效,但仅当所有分类法和元值都存在于自定义帖子中时才返回记录。我需要它返回所有自定义帖子,无论是否存在相应的分类法或元值。

因此,在上述查询中,如果 pm_type 分类法缺少值,将导致该帖子被排除。

对于元值,我正在加入以将附件 ID 转换为 URL。

我查看了 OUTER LEFT JOIN 和嵌套 JOINS,以便在未找到分类连接时获得结果,但没有运气。

最佳答案

我认为我在这里尝试的查询风格可能过于复杂。另一种产生相同结果的替代方法是连接一系列查询,每个查询都可以产生或不产生结果,即:

SELECT DISTINCT post_title
,(SELECT group_concat(wp_terms.name separator ', ')
FROM wp_terms
INNER JOIN wp_term_taxonomy on wp_terms.term_id = wp_term_taxonomy.term_id
INNER JOIN wp_term_relationships wpr on wpr.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
WHERE taxonomy= 'pm_type' and wp_posts.ID = wpr.object_id
) AS "type"

,(SELECT guid FROM wp_posts attachment
INNER JOIN wp_postmeta on wp_postmeta.meta_value = attachment.ID
WHERE wp_postmeta.meta_key = 'pm_pdf_link' AND wp_postmeta.post_id = wp_posts.ID) AS "pub_url"

FROM wp_posts
WHERE post_type = 'pressmention'
AND post_status = 'publish'

尽管这可能不如单个 SELECT 语句执行得那么好,但它更易于阅读,并且当只有某些分类法具有值时, a 将返回一条记录。

关于mysql - 用于获取自定义帖子类型和可选分类法的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36034096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com