2015-06-08 139 views
0

我想添加另一个WHERE查询,但我没有任何喜悦。其他字段

我有一个有三个字段的表单:price,min_price和max_price。

我已经加入这一行:

WHERE 'price' BETWEEN 'property_min_price' AND 'property_max_price' 

这似乎合乎逻辑的我,但它不工作。有小费吗?谢谢。

/** 
* Set the Query 
*/ 
private function setQuery() 
{ 
    $sql = " 
     SELECT 
     p.post_title AS title, 
     p.ID AS id," . 
     $this->sqlFieldVars() . " 
     lat.meta_value AS latitude, 
     lng.meta_value AS longitude, 
     (" . $this->query_data['diameter'] . " * acos(cos(radians(@origlat)) * cos(radians(lat.meta_value)) 
     * cos(radians(lng.meta_value) - radians(@origlng)) + sin(radians(@origlat)) * sin(radians(lat.meta_value)))) 
     AS distance 
     FROM " . $this->query_data['post_table'] . " AS p 
     LEFT JOIN " . $this->query_data['meta_table'] . " AS lat 
     ON p.ID = lat.post_id AND lat.meta_key = '" . $this->query_data['lat_field'] . "' 
     LEFT JOIN " . $this->query_data['meta_table'] . " AS lng 
     ON p.ID = lng.post_id AND lng.meta_key = '" . $this->query_data['lng_field'] . "'" . 
     $this->sqlFieldJoins() . "  
     WHERE lat.meta_value 
      BETWEEN @origlat - (@distance/@dist_unit) 
      AND @origlat + (@distance/@dist_unit) 
     AND lng.meta_value 
      BETWEEN @origlng - (@distance/(@dist_unit * cos(radians(@origlat)))) 
      AND @origlng + (@distance/(@dist_unit * cos(radians(@origlat)))) 
     AND `post_type` = '" . $this->query_data['post_type'] . "' 
     AND `post_status` = 'publish' 
     WHERE 'price' BETWEEN 'property_min_price' AND 'property_max_price' 
     HAVING distance < @distance 
     ORDER BY distance\n" . 
     $this->sqlLimit() . ";"; 
    $this->sql = $sql; 
} 
+0

你能分享你的错误吗? –

+0

当我添加该行时,该表单无法正常工作。 – dmt

+1

你有两个where子句.. – amdixon

回答

1

你只能有一个WHERE条款。要添加其他条件,现有WHERE,使用AND

... AND `post_status` = 'publish' 
    AND `price` BETWEEN 'property_min_price' AND 'property_max_price' ... 

而且,我想,反单引号 - 不是单引号 - 应该用于列名。 (但我不是MySQL的人,所以我不知道...)

+0

$ this-> query_data ['property_min_price'] = get_option ['property_min_price']; $ this-> query_data ['property_max_price'] = get_option ['property_max_price']; $ this-> query_data ['price'] = get_option('price'); – dmt

+0

这可能是问题吗? – dmt

+0

对不起,我不知道那个界面,所以我无法回答。 (我什么都不知道,但SQL ...) – jarlh

1

通常,在SQL字符串的末尾只能有一个WHERE语句。我注意到你有几个连接,接着是WHERE语句,紧接着是第二个WHERE语句。

你有没有试过改变你的第二个地方到?

post_status = '发布'
'价格' 之间 'property_min_price' 与 'property_max_price'

+0

难道这是问题: \t $ this-> query_data ['property_min_price'] = get_option ['property_min_price']; $ this-> query_data ['property_max_price'] = get_option ['property_max_price']; $ this-> query_data ['price'] = get_option('price'); – dmt

+0

正如我已经尝试使用AND而不是在哪里,仍然没有喜悦。 – dmt

+0

@dmt如果query_data ['value']是您在别处声明的键值数组,并且get_option ['option_name']是在WordPress文件wp-includes/option.php中声明的选项,那么它可能是你的问题的原因。您是否在创建SQL字符串之前尝试过输出这些变量的值? – Eddy