我正在使用Wordpress并尝试创建一个视图,以便更轻松地查看和分析我的度假村数据.度假村数据存储在Wordpress的post_meta表中,并在称为"度假村"的自定义帖子类型中引用.以下查询为我提供了我想要解析的结果集:
SELECT a.id, a.post_type, a.post_title, b.post_id, b.meta_key, b.meta_value
FROM alpinezone_postmeta b
INNER JOIN alpinezone_posts a ON a.id = b.post_id
WHERE a.post_type = "resorts"
Run Code Online (Sandbox Code Playgroud)
我想用这个结果集做的是让我定义的集合的每个唯一meta_key成为一列,然后每一行应该是一个唯一的b.post_id(或a.id),它对应于一个单独的度假胜地的记录.
所以最终我最终得到:
post_title | phone_num | state |
resort1 | 800-200-1111 | Vermont |
resort2 | 800-200-2222 | New Hampshire |
resort 3 | 800-200-2323 | Maine |
Run Code Online (Sandbox Code Playgroud)
基本上......我在MySQL上并不那么出色,所以试图找出解决这个问题的最佳方法.我有一个列表,列出了我想要放入列的所有meta_key,其中有36个捕获了一系列信息.
编辑:更多细节.
当前结构 - 显示它来自哪个表
*alpinezone_posts alpinezone_postmeta alpinezone_postmeta*
post_title meta_key meta_value
----------------------------------------------------------------
sugarloaf snow_phone 888-234-2222
sugarloaf vertical_feet 2300
sugarloaf site_url sugarloaf.com
wachusett snow_phone 888-111-2222
wachusett vertical_feet 1000
wachusett site_url wachusett.com
Run Code Online (Sandbox Code Playgroud)
这两个表在表alpinezone_postmeta的post_id和表alpinezone_posts的id上连接.
只想要表alpinezone_posts中的post_type ="resorts"的结果
我希望它在新视图中看起来如何
post_title snow_phone vertical_feet site_url
-------------------------------------------------------
sugarloaf 888-234-2222 2300 sugarloaf.com
wachusett 888-111-2222 1000 wachusett.com
Run Code Online (Sandbox Code Playgroud)
您想要使用的是带有"GROUP BY"的交叉表格或数据透视表,如下例所示:http://en.wikibooks.org/wiki/MySQL/Pivot_table
你需要使用其他东西,然后使用SUM()来表示字符串...就像MAX():http: //forums.mysql.com/read.php?20,75357,75367 #msg-75367
SELECT p.post_title AS post_title,
MAX(IF(m.meta_key='phone_num',m.meta_value,0)) AS phone_num,
MAX(IF(m.meta_key='state',m.meta_value,0)) AS state
FROM alpinezone_postmeta m
INNER JOIN alpinezone_posts p ON m.post_id = p.id
WHERE p.post_type = 'resorts'
GROUP BY m.post_id`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |