我正在尝试编写一个wordpress查询,它会为每个post_id
提供fromprice
个region
字段。现在的诀窍是这些是wordpress中的自定义字段,因此,信息以行为基础存储,因此没有region
和fromprice
列。
所以我拥有的数据是(但当然包含更多行):
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
答案 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