[英]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.