2015-06-08 207 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