代码之家  ›  专栏  ›  技术社区  ›  MHF

“posts”和“postemta”wordpress表的嵌套联接查询

  •  0
  • MHF  · 技术社区  · 8 年前

    我有一些数据在 posts 桌子和邮差里有一些 meta_key 具有不同的值,例如:

    元密钥 =“电话”
    meta_value = 987654321

    元密钥 =“分数”
    元值 = 40

    很明显,对于一个电话号码,可以记录几个点。
    我想得到一个电话号码的总分及其与帖子的关系。
    这个问题似乎很复杂!!!!

    我试过的和这个类似:

    SELECT p.*, pm.* from wp_posts AS r    
    LEFT JOIN wp_postsmeta AS pm    
    ON pm.post_id = r.id    
    WHERE (pm.meta_key = 'score')    
    LEFT JOIN wp_postsmeta AS p     
    ON p.post_id = r.id    
    WHERE p.meta_key = 'phone'    
    

    我应该如何实现这一点?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Gordon Linoff    8 年前

    正确的语法是:

    SELECT p.*, pms.meta_value as score, pmp.meta_value as phone
    FROM wp_posts p LEFT JOIN
         wp_postsmeta pms    
         ON pms.post_id = p.id AND pms.meta_key = 'score' LEFT JOIN   
         wp_postsmeta pmp     
         ON pmp.post_id = p.id AND pmp.meta_key = 'phone' ;
    

    笔记:

    • 表别名应该是有意义的。 r 没有意义 wp_posts 但是 p 做。
    • p.* 是个很奇怪的选择。我想你真的很想要posts表。
    • 您应该为查询返回的值提供合理的名称,例如 score phone .
    • 这个 where 子句在查询中既被放错位置又被误用。这些条件应该在 on 条款。

    编辑:

    你修改后的问题似乎表明:

    SELECT pmp.meta_value as phone, SUM(pms.meta_value) as score, 
    FROM wp_postsmeta pms LEFT JOIN 
         wp_postsmeta pmp     
         ON pmp.post_id = pms.post_id AND pmp.meta_key = 'phone' and pms.meta_key = 'score'
    GROUP BY phone;