【问题标题】:complex mysql query, joining tables and display multiple rows as one row复杂的mysql查询,连接表并将多行显示为一行
【发布时间】:2017-06-18 11:34:34
【问题描述】:

我有以下设置

TABLE WP_POSTS

 ID   POST_TYPE  
====  =========
6891  trainer  
6896  trainer  
...  

TABLE WP_POSTMETA  

POST_ID   META_KEY   META_VALUE  
=======   ========   ==========
6891      lat        48.205206   
6891      long       11.326714  
6896      lat        23.5454    
6896      long       25.343434 
...  

我的目标是为 post_type 训练器的每个 wp_posts 条目设置一行,其中包含 post_id 和 meta_key lat 和 long 的 meta_value

所以我想要的结果应该是这样的

id     lat    long
6891   48...  11....
6896   23...  25....

现在我得到以下内容

id      meta_key    meta_value  
====    ========    ==========
6891    lat         48.205206   
6896    lat         23.5454 
6891    long        11.326714   
6896    long        25.343434   

使用以下 sql 查询

SELECT wp_posts.id, wp_postmeta.meta_key, wp_postmeta.meta_value  
FROM `wp_posts` 
     INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.id 
WHERE wp_posts.post_type = 'trainer' 
      AND (wp_postmeta.meta_key = 'lat' OR wp_postmeta.meta_key = 'long')

是否可以一排有纬度和经度?

感谢阅读! :-)

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:
    Untested (and may not work because of your db setup, no way to control the order of the rows being retrieved - poor design - lat and long should be on the same row): SELECT wp.id, GROUP_CONCAT(wp.meta_value) AS 'Lat/Long' FROM wp_posts as wp, wp_postsmeta AS wpm WHERE (wp.id=wpm.id AND wpm.post_type='trainer')
    

    【讨论】:

      【解决方案2】:

      这可以工作 ;)

      SELECT wp_posts.id,
             max(if(wp_postmeta.meta_key = 'lat', wp_postmeta.meta_value, 0)) AS lat,
             max(if(wp_postmeta.meta_key = 'long', wp_postmeta.meta_value, 0)) AS long
      FROM `wp_posts`
      INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.id
      WHERE wp_posts.post_type = 'trainer'
          AND (wp_postmeta.meta_key = 'lat'
               OR wp_postmeta.meta_key = 'long')
      GROUP BY wp_posts.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-17
        • 2012-11-29
        • 2019-12-25
        • 2013-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多