我目前正在使用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
所以我希望能够计算一个特定的价格范围,这也是基于特定的房产类型
答案 0 :(得分: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
字段应该存储属性类型的字符串值以及price
的数值,因此我CAST
将其DECIMAL
添加到MAX
为了将其选择为数字数据类型,以便稍后可以对其进行计算。我还使用{{1}}作为聚合函数来解决行数。
这是你在这种设计模型中经常遇到的,他们称之为Entity–attribute–value model。您可以在标记eav下找到有关此数据模型的大量有用主题。您还可以在the following answer
中找到有关此设计模型的更多有用网页答案 1 :(得分:0)
这种表结构使得您正在寻找的多面搜索类型变得有些困难/低效。为确保满足所有WHERE
条款,您需要INNER JOIN
meta
个表格。这为您提供了更适合您的查询的临时数据格式。
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'