根据其他表创建列的MySQL查询

5

我正在尝试查询多个WordPress表格,而且我一边学习一边进行。

这是我目前的进展:

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'

这是我得到的内容(抱歉我无法弄清楚如何发布更清洁的内容 - 希望这样有意义)
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

我该如何将名称字段中的数据分开,以便如果它是post_tag,则在一列(post_tag)中,如果它是类别,则在另一列(category)中?例如:
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

我不确定你想要什么,你似乎想基于两个不同的标准来做某些事情,你是想检测类别分类法中的帖子吗? - Mathieu Dumoulin
谢谢。是的,那就是我想做的。我使用了下面的答案,它完美地解决了我的问题! - user1958798
1个回答

3

使用 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'

谢谢,谢谢,谢谢!我没有SQL经验,找了半天都快抓狂了。它完美地运行了! - user1958798

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接