2010-09-16 48 views
2

我想写一个wordpress的查询,它会给我所有的post_id的最低fromprice字段为每个region。现在诀窍是这些是wordpress中的自定义字段,由于这样,信息存储在行中,所以没有regionfromprice列。需要在一个MySQL查询中的每个区域的最低价格

所以我的数据是(当然包含了很多行):

Post_ID | Meta_Key | Meta_Value 
1  | Region | Location1 
1  | FromPrice | 150 
2  | Region | Location1 
2  | FromPrice | 160 
3  | Region | Location2 
3  | FromPrice | 145 

我努力建设应返回各分组的“价格最低”匹配后的POST_ID查询用类似的结果区域:

Post_ID | Region | From Price 
1  | Location1 | 150 
3  | Location2 | 145 

这将让我轻松地迭代POST_ID的和打印所需的信息,其实,我只是高兴回到POST_ID的,如果剩下的就是更加努力,然后我就可以获取信息如果需要可以独立。

非常感谢,把我的头发撕掉了,不要经常考虑将结果从基于行的列转移到列的基础上,但这次我需要它!

因此,您可以了解我拥有的表格结构,您可以使用下面的参考指南。我以为我有这个,但事实证明是的,这个查询打印出每个不同的区域与发现附着在该地区的该帖子价格最低,但post_id完全不正确。我不知道为什么,它似乎只是获得post_id的第一个结果并使用它。

SELECT pm.post_id, 
     pm2.meta_value as region, 
     MIN(pm.meta_value) as price 
FROM `wp_postmeta` pm 
inner join `wp_postmeta` pm2 
    on pm2.post_id = pm.post_id 
    AND pm2.meta_key = 'region' 
    AND pm.meta_key = 'fromprice' 
group by region 

回答

1

我建议在查询改变MIN(pm.meta_value)MIN(CAST(pm.meta_value AS DECIMAL))。 Meta_value是一个字符字段,因此您现有的查询将返回最小字符串值,而不是最小数值;例如,“100”将被视为低于“21”。

编辑 - 修正的CAST语法。

+0

非常感谢,我不知道它是否会推断这个程序,这将是一个很大的帮助。 – GONeale 2010-09-16 23:38:03

+0

嗯,当我这样做时,我收到一个错误: 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'pm.meta_value AS DECIMAL'附近使用正确的语法'从'wp_postmeta'pm内部连接'wp_po'在第1行] – GONeale 2010-09-16 23:41:41

+0

Oops - 看起来像我的CAST语法错误。尝试修改后的版本。 – 2010-09-17 09:52:34

0

很难搞清楚,而不能执行查询,但它将有助于对只是改变你的组:

group by pm.post_id, region 
+0

我刚刚试过,现在我得到每一个帖子;这是有道理的,就像我开始用'post_id'分组一样,这些每次都是唯一的,所以我当然会为每一个组获得一个单独的组。 – GONeale 2010-09-16 13:49:14

相关问题