在mysql查询中需要每个区域的最低价格

时间:2010-09-16 13:36:38

标签: sql mysql

我正在尝试编写一个wordpress查询,它会为每个post_id提供frompriceregion字段。现在的诀窍是这些是wordpress中的自定义字段,因此,信息以行为基础存储,因此没有regionfromprice列。

所以我拥有的数据是(但当然包含更多行):

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

2 个答案:

答案 0 :(得分:1)

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

编辑 - 修改了CAST语法。

答案 1 :(得分:0)

如果不能执行查询,很难弄清楚,但是只需将您的组更改为:

group by pm.post_id, region