简体   繁体   English

复杂的mysql查询,联接表并将多行显示为一行

[英]complex mysql query, joining tables and display multiple rows as one row

i've the following setup 我有以下设置

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 
...  

my goal ist to have one line for every wp_posts entry of post_type trainer with the post_id and the meta_value of meta_key lat and long 我的目标专家对post_type培训师的每个wp_posts条目都使用一行,并带有post_id和meta_key的meta_value lat和long

so my desired result should look like this 所以我想要的结果应该像这样

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

right now i'm getting the following 现在我得到以下

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

using the following sql query 使用以下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')

is it possible to have lat and long in one row? 可以同时排长尾吗?

thanks for reading! 谢谢阅读! :-) :-)

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')

This could work ;) 这可能有效;)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM