SQL查询以提取所有具有类别的WordPress帖子

Posted

技术标签:

【中文标题】SQL查询以提取所有具有类别的WordPress帖子【英文标题】:SQL query to extract all WordPress posts with categories 【发布时间】:2012-10-15 18:44:46 【问题描述】:

我需要从我的 WordPress 数据库中提取所有帖子以及相关类别,但不知道如何编写此查询。我已经尝试了几次,没有任何乐趣,希望能得到帮助吗?

编辑:这是我已经尝试过的:

SELECT post_title, wpr.object_id, wp_terms.name
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
INNER JOIN wp_posts ON ID = wpr.object_id
WHERE taxonomy = 'category' 
AND post_type = 'post' 
ORDER by post_title

这似乎有效,但它返回 1,553,我知道我的数据库中只有 1343。

编辑: 不久前,我们在另一个 SQL 查询上做了同样的事情,发现它正在拉入修订和其他帖子类型,但认为这是使用 post_type = 'post' 解决的

编辑: 在查看数据库中的类别数量后,我得出总数为 216,如果减去 1553 - 1343 = 216,则为 6。所以我认为这个总数 1553 来自需要的 wp_terms 表被排除在外,并且只显示那些已发布帖子处于活动状态的帖子?

编辑: 另一种可能性是每个帖子可以有多个类别,因此有更多帖子的原因(1553)。那么如何将每个帖子分成多个类别呢?

非常感谢!

【问题讨论】:

what have you tried 到目前为止?你能发布你需要查询的表的结构吗? 您发布的内容有什么问题?是有错误,还是没有返回你想要的结果? 我添加了一些编辑来帮助我的发现,如果有人可以再看一遍吗? 【参考方案1】:

这是对我有用的最终答案。

SELECT DISTINCT
post_title
, post_content
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Asking Price (US\$)' AND wp_postmeta.post_id = wp_posts.ID) AS "Asking Price (US\$)"
,(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= 'category' and wp_posts.ID = wpr.object_id
) AS "Categories"
,(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= 'post_tag' and wp_posts.ID = wpr.object_id
) AS "Tags"
FROM wp_posts
WHERE post_type = 'post' 
ORDER BY
post_title
, post_content

【讨论】:

感谢分享用于从数据库中获取标签和类别的 SQL - 帮助很大:) AND post_status = 'publish' 【参考方案2】:
/* Query for fetch post/posts using post user, post category and post_title */
$query ="SELECT wp_posts.post_title, wp_posts.post_content, wp_posts.comment_count, wp_users.display_name, wp_terms.name 来自 wp_posts 加入 wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 加入 wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 左连接 wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id) 加入 wp_users ON (wp_posts.post_author = wp_users.ID) WHERE wp_term_taxonomy.term_id IN ($bycat) 和 wp_users.ID = $byuser 和 wp_posts.post_type = 'post' AND (wp_posts.post_content LIKE '$bytitle' 或 wp_posts.post_title LIKE '$bytitle') 和 wp_posts.post_status = '发布' 按 wp_posts.post_modified DESC 排序"; /*---- 显示结果 -----*/ $resultfirst = $wpdb->get_results($query); foreach($resultfirst as $result) echo $result->post_title .''; echo $result->display_name.''; echo $result->name.''; echo $result->comment_count.'';

【讨论】:

以上是关于SQL查询以提取所有具有类别的WordPress帖子的主要内容,如果未能解决你的问题,请参考以下文章

获取Wordpress查询中的所有类别,自定义字段值?

在 Wordpress Datewise 中为特定类别创建存档

如何在子类别页面中显示 Wordpress 类别?

手动检索带有 JSON 类别/标签的 Wordpress 帖子

SQL Server:SELECT 查询以获取 DISTINCT 和 MAX 显示顺序值

WordPress |帖子查询 |查询帖子类别以创建子类别过滤器并将其应用于我的函数文件中的 Ajax 过滤器