0

我目前正在使用 Wordpress 的 WP-Property 插件的网站上工作。

基本上,我试图在特定价格范围的文本搜索链接旁边显示一个计数器。

下面是我正在运行的查询,它的价格范围非常好。

  $apartprice1 = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value BETWEEN 50000 AND 74999");
if (0 < $apartprice1) $apartprice1 = number_format($apartprice1);

但是,我想对此进行扩展以仅显示此特定价格范围内的“公寓”。现在请记住,在meta_value列中还存储了属性类型值(公寓、房屋、永久业权)。

请问有谁可以为我揭开这个神秘面纱吗?

编辑:下面有一些进一步的阐述:

Table name is postmeta

meta_id     post_id     meta_key        meta_value

348         41          property_type   apartment
358         41          price           698000

所以我希望能够计算一个特定的价格范围,该价格范围也基于特定的房产类型

4

2 回答 2

0

如果您正在寻找显示每个属性值的计数partments, houses, freeholds,您应该添加一个GROUP BY property_type

SELECT  property_type, COUNT(*) 
FROM $wpdb->postmeta 
WHERE meta_value BETWEEN 50000 AND 74999
GROUP BY property_type

更新:您必须将转换为列,以便按照您描述的方式获取数据,如下所示:

SELECT t.property_type, COUNT(t.post_id) AS 'type count'
FROM
(
   SELECT t.post_id,
     MAX(CASE WHEN t.meta_key = 'property_type' THEN t.meta_value END) AS property_type,
     MAX(CASE WHEN t.meta_key = 'price' THEN CAST(t.meta_value AS DECIMAL) END) AS Price
   FROM postmeta t
   GROUP BY t.post_id
) t
WHERE t.property_type = 'apartment' 
  AND t.Price BETWEEN 600000 AND 700000
GROUP BY t.property_type

请注意,该meta_value字段应该存储属性类型的字符串值以及prices 的数值,因此我CAST将其DECIMAL选择为数值数据类型,以便您稍后可以对其执行计算。我还用作MAX聚合函数来旋转行。

这是SQL fiddle 中的演示

这就是你通常在这样的设计模型中遇到的,他们称之为Entity-attribute-value model下找到很多关于此数据模型的有用线程。您还可以在 以下答案中找到有关此设计模型的更多有用页面

于 2012-09-23T13:49:10.053 回答
0

这种表结构使得执行您正在寻找的多面搜索类型有些困难/效率低下。为确保满足所有WHERE子句,您需要INNER JOINmeta表设置为自身。这为您提供了一种更适合您的查询的临时数据格式。

SELECT m1.post_id
FROM meta m1
INNER JOIN meta m2 ON m1.post_id = m2.post_id
WHERE m1.meta_key = 'price'
AND m1.meta_value
BETWEEN 50000 AND 7000000 AND m2.meta_key = 'property_type'
AND m2.meta_value = 'apartment'

请记住,对于您添加的每一个额外方面,您都需要执行额外的INNER JOIN. 另外,如果您还没有,我建议您在该post_id列上建立一个索引。

要获得计数,只需更改SELECT子句中的内容。

SELECT COUNT(*)
FROM meta m1
INNER JOIN meta m2 ON m1.post_id = m2.post_id
WHERE m1.meta_key = 'price'
AND m1.meta_value
BETWEEN 50000 AND 7000000 AND m2.meta_key = 'property_type'
AND m2.meta_value = 'apartment'
于 2012-09-23T15:16:16.763 回答