【问题标题】:Wordpress SQL: get post category and tagsWordpress SQL:获取帖子类别和标签
【发布时间】:2018-06-24 13:44:19
【问题描述】:

我想查询存储在 MySQL 数据库中的 Wordpress 数据,以获得包含列的结果:

  1. post_id
  2. 类别
  3. 逗号分隔标签

预期输出:

+---------------+----------+----------------+
| post_id       | category | tags           |
|---------------+----------+----------------+
| 213           | news     | tag1,tag2,tag3 |
+---------------+----------+----------------+

这是我尝试过的:

SELECT
    p.id,
    c.name,
    GROUP_CONCAT(t.`name`)
FROM wp_posts p
JOIN wp_term_relationships cr 
    on (p.`id`=cr.`object_id`)
JOIN wp_term_taxonomy ct 
    on (ct.`term_taxonomy_id`=cr.`term_taxonomy_id` and ct.`taxonomy`='category')
JOIN wp_terms c 
    on (ct.`term_id`=c.`term_id`)
JOIN wp_term_relationships tr 
    on (p.`id`=tr.`object_id`)
JOIN wp_term_taxonomy tt 
    on (tt.`term_taxonomy_id`=tr.`term_taxonomy_id` 
   and tt.`taxonomy`='post_tag')
JOIN wp_terms t 
    on (tt.`term_id`=t.`term_id`)

结果,我得到了我想要的列和预期的内容,但是我只得到一行。

我做错了什么?

【问题讨论】:

  • 您包含一个聚合函数,但没有 group by 子句。这是基本的东西。

标签: mysql sql wordpress tags


【解决方案1】:

这是基于 Pierre 的代码,扩展为连接多个类别,以及包含没有类别或标签的帖子。

SELECT
    p.id,
    p.post_name,
    GROUP_CONCAT(DISTINCT c.`name`) as categories,
    GROUP_CONCAT(DISTINCT t.`name`) as tags
FROM wp_posts p
LEFT JOIN wp_term_relationships cr
    on (p.`id`=cr.`object_id`)
LEFT JOIN wp_term_taxonomy ct
    on (ct.`term_taxonomy_id`=cr.`term_taxonomy_id`
    and ct.`taxonomy`='category')
LEFT JOIN wp_terms c on
    (ct.`term_id`=c.`term_id`)
LEFT JOIN wp_term_relationships tr
    on (p.`id`=tr.`object_id`)
LEFT JOIN wp_term_taxonomy tt
    on (tt.`term_taxonomy_id`=tr.`term_taxonomy_id`
    and tt.`taxonomy`='post_tag')
LEFT JOIN wp_terms t
    on (tt.`term_id`=t.`term_id`)
GROUP BY p.id

【讨论】:

    【解决方案2】:

    如 cmets 中所述,我包含了一个聚合函数,但没有“分组依据”子句。

    现在这似乎可行(刚刚添加了GROUP BY 行):

    SELECT
        p.id,
        p.post_name,
        c.name,
        GROUP_CONCAT(t.`name`)
    FROM wp_posts p
    JOIN wp_term_relationships cr
        on (p.`id`=cr.`object_id`)
    JOIN wp_term_taxonomy ct
        on (ct.`term_taxonomy_id`=cr.`term_taxonomy_id`
        and ct.`taxonomy`='category')
    JOIN wp_terms c on
        (ct.`term_id`=c.`term_id`)
    JOIN wp_term_relationships tr
        on (p.`id`=tr.`object_id`)
    JOIN wp_term_taxonomy tt
        on (tt.`term_taxonomy_id`=tr.`term_taxonomy_id`
        and tt.`taxonomy`='post_tag')
    JOIN wp_terms t
        on (tt.`term_id`=t.`term_id`)
    GROUP BY p.id
    
    
    +---------------+----------+----------------+
    | post_id       | category | tags           |
    |---------------+----------+----------------+
    | 213           | news     | tag1,tag2,tag3 |
    +---------------+----------+----------------+
    | 216           | whatever | tag2,tag3      |
    +---------------+----------+----------------+
    

    谢谢草莓!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-27
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多