簡體   English   中英

如何在wordpress中mysql查詢所有帖子及其所屬類別(包括父類別)的列表

[英]How to mysql query a list of all posts and the categories they belong to (includeing the parent categories) in wordpress

我正在開發一個應用程序,基本上是將部分wordpress數據庫同步到該應用程序。 我希望不是創建wordpress的整個表結構,而是創建一個CategoryRelationship表,該表僅包含兩列(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

上面的示例大部分有效,盡管我缺少第一個父母,但我知道此查詢可以給我重復的內容,但我稍后將其清理(如果我可以一次性完成所有操作,那顯然是最好的)。
另外,如果我更改行:

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(在第一個ID中我沒有找到),但其余部分則沒有。 我嘗試了所有不同的連接,但無濟於事...

嘗試2)我從此處修改了此代碼,這使我獲得了類別和父類別,但是我必須指定ID。 我不確定如何在上面插入我的代碼以循環獲取所有帶有類別的帖子ID。 目前,它只為我提供所有父類別和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

在此先感謝您的幫助。

因此,以下查詢對我有用,盡管我認為這不是最佳解決方案。 我不得不添加比較,即每個聯接的分類法是相同的。 由於某種原因,當它在wp_2_term_taxonomy表上進行了第三次連接時,它正在連接無效值...無法解釋。 希望有人有更好的解決方案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM