2014-02-24 29 views
0

我的查詢獲取了我需要的所有信息,但對於我的生活,似乎無法按照自己想要的方式組織行。該信息來自2個不同的表,很明顯,一個是組織這樣的日子我想是不是在有組織的易於獲取的方式,像這樣:如何在MySQL查詢中更好地獲取不同的行?

post_id | meta_key | meta_value 
--------|----------|----------- 
1  | key_one | value1 
1  | key_two | value2 
2  | key_one | value3 
2  | key_two | value4 

當我想:

post_id | key_one | key_two 
--------|----------|----------- 
1  | value1 | value2 
2  | value3 | value4 

這是查詢,返回低於該值。再次,正確的信息,但分散在各行。我知道,我只是聲明瞭......

SELECT DISTINCT wp_postmeta.post_id, 
CASE WHEN wp_postmeta.meta_key = 'allowed' THEN wp_postmeta.meta_value END allowed, 
CASE WHEN wp_postmeta.meta_key = 'amenities' THEN wp_postmeta.meta_value END amenities, 
CASE WHEN wp_postmeta.meta_key = 'trail-type' THEN wp_postmeta.meta_value END trailtype, 
CASE WHEN wp_postmeta.meta_key = 'weatherlat' THEN wp_postmeta.meta_value END weatherlat, 
CASE WHEN wp_postmeta.meta_key = 'weatherlon' THEN wp_postmeta.meta_value END weatherlon 
from wp_postmeta WHERE wp_postmeta.post_id IN (SELECT object_id AS id FROM wp_term_relationships WHERE term_taxonomy_id = 74) 

這裏的響應,再下面,我嘗試讓

post_id | allowed | amenities | trailtype | weatherlat | weatherlon 
--------|---------|-----------|-----------|------------|----------- 
503  | 1,2,3 | NULL  | NULL  | NULL  | NULL 
503  | NULL | No-Water | NULL  | NULL  | NULL 
503  | NULL | NULL  | Easy  | NULL  | NULL 
503  | NULL | NULL  | NULL  | NULL  | NULL 
503  | NULL | NULL  | NULL  | 47.37070 | NULL 
503  | NULL | NULL  | NULL  | NULL  | -122.00633 
566  | 5,6,7 | NULL  | NULL  | NULL  | NULL 
566  | NULL | Restrooms | NULL  | NULL  | NULL 
566  | NULL | NULL  | Moderate | NULL  | NULL 
566  | NULL | NULL  | NULL  | NULL  | NULL 
566  | NULL | NULL  | NULL  | 47.729212 | NULL 
566  | NULL | NULL  | NULL  | NULL  | -117.142829 

而我想

post_id | allowed | amenities | trailtype | weatherlat | weatherlon 
--------|---------|-----------|-----------|------------|----------- 
503  | 1,2,3 | No-Water | Easy  | 47.37070 | -122.00633 
566  | 5,6,7 | Restrooms | Moderate | 47.729212 | -117.142829 

回答

1

修改您的查詢以使用group by和每列上的聚合函數:

SELECT wp_postmeta.post_id, 
     max(CASE WHEN wp_postmeta.meta_key = 'allowed' THEN wp_postmeta.meta_value END) as allowed, 
     max(CASE WHEN wp_postmeta.meta_key = 'amenities' THEN wp_postmeta.meta_value END) as amenities, 
     max(CASE WHEN wp_postmeta.meta_key = 'trail-type' THEN wp_postmeta.meta_value END) as trailtype, 
     max(CASE WHEN wp_postmeta.meta_key = 'weatherlat' THEN wp_postmeta.meta_value END) as weatherlat, 
     max(CASE WHEN wp_postmeta.meta_key = 'weatherlon' THEN wp_postmeta.meta_value END) as weatherlon 
from wp_postmeta 
where wp_postmeta.post_id IN (SELECT object_id AS id 
           FROM wp_term_relationships 
           WHERE term_taxonomy_id = 74 
          ) 
group by wp_postmeta.post_id; 
+0

贏得這麼多!謝謝!!!我知道我錯過了一些東西! –