Mysql SQL查询:如何正确分组项目?

Mysql SQL查询:如何正确分组项目?,mysql,sql,wordpress,Mysql,Sql,Wordpress,请您帮助修改下面的SQL查询,使其在mySQL中工作好吗?目前,错误消息是表t1不存在。我想得到一个列为“post_title”、“name1”、“url1”的表 如果有帮助,那么可以在Wordpress CMS数据库上测试此查询 SELECT t1.post_title, (select meta_value from t1 where t1.meta_key='name1_class' limit 1) as name1, (select meta_value f

请您帮助修改下面的SQL查询,使其在mySQL中工作好吗?目前,错误消息是表t1不存在。我想得到一个列为“post_title”、“name1”、“url1”的表

如果有帮助,那么可以在Wordpress CMS数据库上测试此查询

SELECT t1.post_title,
       (select meta_value from t1 where t1.meta_key='name1_class' limit 1) as name1,
       (select meta_value from t1 where t1.meta_key='url1_class' limit 1) as url1
  FROM (select pm.post_id as id, pm.meta_key, pm.meta_value, p.post_title, t.slug from wp_2_postmeta pm
    inner join wp_2_posts p on pm.post_id = p.id
    inner join wp_2_term_relationships tr on tr.object_id = p.id    
    inner join wp_2_term_taxonomy tt on tr.term_taxonomy_id = tt.term_taxonomy_id
    inner join wp_2_terms t on t.term_id = tt.term_id
    where post_type='footercolumn' and post_status='publish' and pm.meta_key like '%class') t1 
“FROM”子句中t1表的子查询生成如下数据集:

'id', 'meta_key',  'meta_value', 'post_title', 'slug' 
'18', 'name1_class', 'Our Work', 'Who we are', 'column1' 
'18', 'url1_class', '/work.html', 'Who we are', 'column1' 
'18', 'name1_class', 'Our Team', 'About', 'column2' 
'18', 'url1_class', 'team.html', 'About', 'column2
我希望结果表为:

'title',      'name1',     'url1'
'Who we are', 'Our Work',  'work.html'
'About',      'Our Team',  'team.html'

谢谢

看起来您正在尝试使用子选择来模拟CTE(公共表表达式),但我想不出一种方法来实现这一点

好消息是,如果可以使用聚合来查找数据,则不需要子选择

SELECT t1.post_title,
       MAX(CASE WHEN meta_key='name1_class' THEN meta_value END) as name1,
       MAX(CASE WHEN meta_key='url1_class' THEN meta_value END) as url1
  FROM (select pm.post_id as id, pm.meta_key, pm.meta_value, p.post_title, t.slug 
        from wp_2_postmeta pm
        inner join wp_2_posts p on pm.post_id = p.id
        inner join wp_2_term_relationships tr on tr.object_id = p.id    
        inner join wp_2_term_taxonomy tt 
           on tr.term_taxonomy_id = tt.term_taxonomy_id
        inner join wp_2_terms t on t.term_id = tt.term_id
        where post_type='footercolumn' and post_status='publish' and pm.meta_key 
              like '%class') t1 

我甚至不认为您需要子查询,您可以两次重新连接Posteta表以获得列并稍微简化查询:

SELECT       p.post_title
            ,pma.meta_value AS name1
            ,pmb.meta_value AS url1

FROM        wp_2_posts p

JOIN        wp_2_postmeta pma
ON          p.ID = pma.post_id
AND         pma.meta_key = 'name1_class'

JOIN        wp_2_postmeta pmb
ON          p.ID = pmb.post_id
AND         pmb.meta_key = 'url1_class'

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

JOIN        wp_2_terms t 
ON          t.term_id = tt.term_id

WHERE       p.post_type='footercolumn'
AND         p.post_status='publish'
如果出于某种原因,每个帖子都有多个
name1\u类
url1\u类
值,并给出重复的帖子标题行,请添加
groupby
以消除该问题

GROUP BY    post_title
如果由于
name1_class
url1_class
中的
NULL
而缺少值,则可以通过将pma/pmb上的联接更改为
左侧外部联接来更正<代码>内部联接
是默认联接类型,因此在这种情况下无需指定
内部联接