Php MySQL-在一列中查询多个值
我目前正在使用Wordpress的WP属性插件的网站上工作 基本上,我试图显示一个计数器旁边的文本搜索链接为一个特定的价格范围 下面是我正在运行的查询,它的价格范围算得上完美Php MySQL-在一列中查询多个值,php,mysql,wordpress,eav,Php,Mysql,Wordpress,Eav,我目前正在使用Wordpress的WP属性插件的网站上工作 基本上,我试图显示一个计数器旁边的文本搜索链接为一个特定的价格范围 下面是我正在运行的查询,它的价格范围算得上完美 $apartprice1 = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value BETWEEN 50000 AND 74999"); if (0 < $apartprice1) $apartprice1 = nu
$apartprice1 = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value BETWEEN 50000 AND 74999");
if (0 < $apartprice1) $apartprice1 = number_format($apartprice1);
因此,我希望能够对特定的价格范围进行计数,该价格范围也基于特定的房地产类型如果您希望显示
部分
,房屋
,自由保有权
,您应该添加一个按房地产类型分组
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
s的数值,因此我CAST
将其转换为DECIMAL
,以便将其选为数字数据类型,以便以后可以对其执行计算。我还使用了MAX
作为一个聚合函数,作为围绕行的工作
这是一本书
这就是你通常在这样一个设计模型中遇到的,他们称之为。您可以在标记下找到许多关于此数据模型的有用线程。您还可以在中找到有关此设计模型的更多有用页面。此表结构使您查找的多因素搜索类型有些困难/效率低下。为了确保满足所有
WHERE
子句,您需要内部连接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'
请记住,对于您添加的每一个额外方面,您都需要进行额外的内部连接。另外,如果您还没有,我建议在post\u 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'
“在meta_value
列中,还存储了属性类型值(公寓、房屋、自由保有权)。-您至少可以提供一个示例。我不知道该怎么做。你能提供一个表格结构吗?@克里斯蒂安-我在编辑的中间,这就足够了吗?@米哈伊多尔更新了这个问题,并用表格结构更新了更多的细节。不完全是我想要的,但还是要谢谢你!很好的一个-这正朝着我想要的方向前进。但是有一件事,它返回post_id值,我如何计算给定价格范围内的post(公寓)数量?(抱歉-尚未完全掌握sql查询)
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'