programing

워드프레스 SQL: 게시물 카테고리 및 태그 가져오기

skycolor 2023. 9. 14. 21:53
반응형

워드프레스 SQL: 게시물 카테고리 및 태그 가져오기

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선):

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      |
+---------------+----------+----------------+

고마워요 딸기!

이는 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

언급URL : https://stackoverflow.com/questions/48271265/wordpress-sql-get-post-category-and-tags

반응형