2013-11-02 62 views
0

我正在開發一個應用程序,我基本上將部分wordpress數據庫同步到應用程序。我希望不是創建wordpress的整個表結構,而是創建一個CategoryRelationship表,其中包含2列(POST_ID)和(CATEGORIES_ID)。類別ID是帖子所屬的所有類別(包括父類別)的逗號分隔值。請注意我的wordpress數據庫是多站點的一部分,因此是WP_2_前綴。如何在wordpress中查詢所有帖子及其所屬類別(包括父類別)的列表

嘗試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 

上面的例子大多工作,雖然我錯過了第一個家長,我知道這個查詢可以給我重複,但我清理一下以後(如果我可以做我t all in 1 go顯然是最好的)。
另外,如果我改變行:

LEFT JOIN wp_2_term_taxonomy tt2 on tt.parent = tt2.term_id 

TO

JOIN wp_2_term_taxonomy tt2 on tt.parent = tt2.term_id 

給我的結果,如:

ID Categories 
10 101,93,93 
19 69,123,68,68 

注意,我得到類別93現在的ID是10(我失蹤在第一個),但不是其餘。我已經嘗試了各種不同的連接,但無濟於事...

嘗試2)我修改這個代碼here,這讓我的類別和父類,但我必須指定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 

預先感謝任何幫助。

回答

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 
相關問題