2014-02-14 66 views
0

在很多程序员的帮助下,我一直在为这个问题奋斗了几天,没有结果。我有一个表,看起来像这样:将MySQL结果转换为简单数组的最佳方式是什么?

meta_id | post_id | meta_key | meta_value 
---------|-----------|------------|------------------- 
46922 | 5923  | adlink | htp://whatever.com 
46923 | 5923  | subloc | Menu Page 
46924 | 5923  | size  | Premium 
46924 | 5923  | location | Washington 
46924 | 5923  | image1 | 5924 
46924 | 5923  | image2 | 5925  
46925 | 5928  | adlink | htp://whatever.com 
46926 | 5928  | subloc | Regular Page 
46927 | 5928  | size  | Standard 
46927 | 5928  | location | Idaho 
46927 | 5928  | image1 | 5926 
46927 | 5928  | image2 | 5927 

我有以下查询,返回我要找的具体结果,但格式就像表;即许多生成的行具有一些常见的post_id - 我需要创建一个数组或结果表,从中我可以访问该信息,就好像每个DISTINCT post_id创建一个具有该ID唯一的数据的行,如下所示:

id | adlink   | sublock | size | location | image1 | image2 
-----|--------------------|-------------|---------|------------|----------|--------- 
5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924  | 5925 
5928 | htp://whatever.com | regular Page| Premium | Idaho  | 5926  | 5927 

这里返回正确的信息查询:

SELECT * 
    FROM wp_postmeta 
WHERE post_id IN (
        SELECT post_id 
         FROM wp_postmeta 
        WHERE (
           meta_value LIKE '%Washington%' 
          AND meta_key = 'location' 
          ) 
+0

你需要一些SQL-FU。 PHP unnecssary –

回答

4

使用条件聚集转动你的数据

SELECT post_id, 
     MAX(CASE WHEN meta_key = 'adlink' THEN meta_value END) adlink, 
     MAX(CASE WHEN meta_key = 'sublock' THEN meta_value END) sublock, 
     MAX(CASE WHEN meta_key = 'size'  THEN meta_value END) size, 
     MAX(CASE WHEN meta_key = 'location' THEN meta_value END) location, 
     MAX(CASE WHEN meta_key = 'image1' THEN meta_value END) image1, 
     MAX(CASE WHEN meta_key = 'image2' THEN meta_value END) image2 
    FROM wp_postmeta 
GROUP BY post_id 

输出:

 
| POST_ID |    ADLINK |  SUBLOCK |  SIZE | LOCATION | IMAGE1 | IMAGE2 | 
|---------|--------------------|--------------|----------|------------|--------|--------| 
| 5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924 | 5925 | 
| 5928 | htp://whatever.com | Regular Page | Standard |  Idaho | 5926 | 5927 | 

这里是SQLFiddle演示

+0

谢谢!这是PERECT! –

+0

你很受欢迎。祝你好运:) – peterm

0

可以在PHP代码构建结果表。与此相似:

$result[$row["post_id"]][$row["meta_key"]] = $row["meta_value"]; 

凡$行 - 是一列从myssql导致

+0

我希望找到一个比建立一个独特的post_id表更简单的解决方案,然后迭代通过其他寻找独特的ID来做到这一点... –

相关问题