2013-06-12 11 views
5

Tôi đang cố gắng truy vấn nhiều bảng WordPress và tôi đã học khi tôi đi.Truy vấn MySQL để tạo cột dựa trên các bảng khác

Dưới đây là những gì tôi có cho đến nay

SELECT 
    tr.object_id, 
    tr.term_taxonomy_id, 
    p.ID, 
    p.post_date, 
    p.post_title, 
    p.post_excerpt, 
    p.guid, 
    t.term_id, 
    t.name, 
    tt.taxonomy 
FROM 
    wp_116_term_relationships AS tr, 
    wp_116_posts AS p, 
    wp_116_terms AS t LEFT JOIN 
    wp_116_term_taxonomy as tt ON tt.term_id = t.term_id 
WHERE 
    p.post_type = 'post' 
    AND p.ID = tr.object_ID 
    AND tr.term_taxonomy_id = tt.term_taxonomy_id 
    AND p.post_date > '2013-06-01' 

Đây là những gì tôi nhận được (xin lỗi tôi không thể tìm ra cách để gửi sạch này - hy vọng nó làm cho tinh thần)

object_id term_taxonomy_id ID post_date post_title post_excerpt guid term_id name taxonomy 
2356  33  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 7496 Marketing Updates category 
2356  32  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 470  News Updates category 
2356  70  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 46408 Tag Test 1  post_tag 
2356  72  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 46410 Tag Test 2  post_tag 
2356  74  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 46412 Tag Test 3  post_t 

Làm thế nào để tách dữ liệu khỏi trường tên sao cho nếu đó là post_tag thì nó nằm trong một cột (post_tag) và nếu đó là một danh mục thì nó nằm trong một danh mục khác (category)? Ví dụ:

object_id term_taxonomy_id ID post_date post_title post_excerpt guid term_id post_tag category 
2356  33  2356 2013-06-07 15:56:54  Test Post for Reports  http://domain.com/?p=2356 7496 Marketing Updates Tag Test 1 
+0

Tôi không chắc chắn những gì bạn muốn ở đây bạn dường như muốn làm một cái gì đó dựa trên hai tiêu chí khác nhau, bạn có muốn thế nào để phát hiện các bài viết trong phân loại danh mục? –

+0

Cảm ơn. Vâng đó là những gì tôi đã cố gắng để làm. Tôi đã sử dụng câu trả lời bên dưới và nó hoạt động hoàn hảo! – user1958798

Trả lời

3

nên được khá thẳng về phía trước với một tuyên bố CASE

SELECT 
    tr.object_id, 
    tr.term_taxonomy_id, 
    p.ID, 
    p.post_date, 
    p.post_title, 
    p.post_excerpt, 
    p.guid, 
    t.term_id, 
    CASE WHEN tt.taxonomy = 'category' THEN t.name ELSE NULL END AS category_name, 
    CASE WHEN tt.taxonomy = 'post_tag' THEN t.name ELSE NULL END AS post_tag_name 
    FROM 
    wp_116_term_relationships AS tr, 
    wp_116_posts AS p, 
    wp_116_terms AS t 
    LEFT JOIN wp_116_term_taxonomy as tt ON tt.term_id = t.term_id 
    WHERE 
    p.post_type = 'post' 
    AND p.ID = tr.object_ID 
    AND tr.term_taxonomy_id = tt.term_taxonomy_id 
    AND p.post_date > '2013-06-01' 
+0

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn! Tôi không có kinh nghiệm SQL và tôi đã kéo tóc của tôi ra tìm kiếm điều này. Nó hoạt động hoàn hảo! – user1958798