我正在开发一个应用程序,我基本上将wordpress数据库的部分同步到应用程序。我希望不是创建wordpress的整个表结构,而是创建一个CategoryRelationship表,其中只包含2列(POST_ID)和(CATEGORIES_ID)。类别ID是帖子所属的所有类别(包括父类别)的逗号分隔值。请注意我的wordpress数据库是多站点的一部分,因此是WP_2_前缀。
尝试1)如下,几乎可以正常工作并给我最接近我想要的结果,但似乎没有得到第一个父母(请注意我只有最大类别3个父母的等级制度:
SELECT DISTINCT ID,
(SELECT CONCAT_WS(',',group_concat(tt.term_id separator ','),tt.parent,tt2.term_id, tt3.term_id, tt4.term_id)
FROM wp_2_terms
JOIN wp_2_term_taxonomy tt on wp_2_terms.term_id = tt.term_id
JOIN wp_2_term_relationships wpr on wpr.term_taxonomy_id = tt.term_taxonomy_id
LEFT JOIN wp_2_term_taxonomy tt2 on tt.parent = tt2.term_id
LEFT JOIN wp_2_term_taxonomy tt3 on tt2.parent = tt3.term_id
LEFT JOIN wp_2_term_taxonomy tt4 on tt3.parent = tt4.term_id
WHERE tt.taxonomy != 'category' and wp_2_posts.ID = wpr.object_id
) AS 'Categories'
FROM wp_2_posts
WHERE post_type = 'post'
AND post_status = 'publish'
AND post_author = 2
这给我一个结果:
ID Categories
10 21,101,166,183,311,350,356,357,360,363,0
19 69,123,166,352,354,356,132,358,360,362,68,68
上面的例子大部分都有效,虽然我错过了第一个父母,我知道这个查询可以给我重复但是我以后清理它(如果我能在1中完成所有这一点最明显)。<登记/> 如果我改变了行:
LEFT JOIN wp_2_term_taxonomy tt2 on tt.parent = tt2.term_id
要
JOIN wp_2_term_taxonomy tt2 on tt.parent = tt2.term_id
给我一些结果:
ID Categories
10 101,93,93
19 69,123,68,68
注意我现在为ID 10获得了类别93(我在第一个中丢失了),但其余的则没有。我尝试了所有不同的连接,但无济于事......
尝试2)我从here修改了此代码,这会获取类别和父类别,但我必须指定ID。我不知道如何在上面插入我的代码来循环以获取所有类别的帖子ID。目前它只是让我所有的父类别&amp; term_id的类别= 165。
SELECT group_concat(T2.term_id separator ',') AS 'Cats'
FROM (
SELECT
@r AS _id,
(SELECT @r := parent FROM wp_2_term_taxonomy WHERE term_id = _id) AS parent,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 165, @l := 0) vars,
wp_2_term_taxonomy tt
WHERE @r <> 0) T1
JOIN wp_2_term_taxonomy T2
ON T1._id = T2.term_id
ORDER BY T1.lvl DESC;
这给我一个结果:
Cats
165,142
尝试3)这个查询仍然非常基础,在单独的列中获取所有类别和第一个父项,但我需要在父类别中迭代一些如何...任何想法?我希望尝试2和3之间的混合可行,但我已经在这方面工作太久了。
SELECT DISTINCT ID, TT.term_id, TT.parent
FROM wp_2_posts p
JOIN wp_2_term_relationships TR
ON TR.object_id = p.ID
JOIN wp_2_term_taxonomy TT
ON TR.term_taxonomy_id = TT.term_taxonomy_id
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
AND p.post_author = 2
这给了我一张表格如下:
ID term_id parent
10 1 0
10 21 0
10 101 93
10 166 0
10 183 0
10 311 0
10 350 0
10 356 0
10 357 0
10 360 0
10 363 0
19 1 0
19 69 68
19 123 122
19 166 0
19 352 0
19 354 0
19 356 0
19 132 0
19 358 0
19 360 0
19 362 0
提前感谢您的帮助。
答案 0 :(得分:1)
所以以下查询对我有用,虽然我觉得这不是最好的解决方案。我必须添加比较,每个连接的分类法都是相同的。出于某种原因,当它在wp_2_term_taxonomy表上进行第3次连接时,它正在加入无效值...无法解释。希望有人有更好的解决方案。
SELECT DISTINCT ID, (
SELECT CONCAT_WS( ',', GROUP_CONCAT( t.term_id
SEPARATOR ',' ) , GROUP_CONCAT( DISTINCT tt2.term_id
SEPARATOR ',' ) , GROUP_CONCAT( DISTINCT tt3.term_id
SEPARATOR ',' ) , GROUP_CONCAT( DISTINCT tt4.term_id
SEPARATOR ',' ) )
FROM wp_2_terms t
JOIN wp_2_term_taxonomy tt ON t.term_id = tt.term_id
JOIN wp_2_term_relationships wpr ON wpr.term_taxonomy_id = tt.term_taxonomy_id
LEFT JOIN wp_2_term_taxonomy tt2 ON tt.parent = tt2.term_id
AND tt2.taxonomy = tt.taxonomy
LEFT JOIN wp_2_term_taxonomy tt3 ON tt2.parent = tt3.term_id
AND tt2.taxonomy = tt3.taxonomy
LEFT JOIN wp_2_term_taxonomy tt4 ON tt3.parent = tt4.term_id
AND tt3.taxonomy = tt4.taxonomy
WHERE tt.taxonomy != 'category'
AND wp_2_posts.ID = wpr.object_id
) AS 'Categories'
FROM wp_2_posts
WHERE post_type = 'post'
AND post_status = 'publish'
AND post_author =2