Php MySQL-在一列中查询多个值

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

我目前正在使用Wordpress的WP属性插件的网站上工作

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

下面是我正在运行的查询,它的价格范围算得上完美

  $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'