2012-03-15 78 views
0

我試圖根據某人選擇的城市來返回記錄。它適用於一個城市。但我試圖把「OR」放在那裏,它只能返回一個城市的結果。不是都。我在這裏做錯了嗎?它看起來沒問題,但我必須做錯事。如何在mysql語句中使用多個WHERE和OR

$result = mysql_query(" 
SELECT 
    lat,lng,id,re,per_num,name,city,state,zip,address,status,category,size, 
    (3959 * acos(cos(radians(40.000000)) 
       * cos(radians(lat)) 
       * cos(radians(lng) - radians(-75.000000)) 
       + sin(radians(40.000000)) 
       * sin(radians(lat)) 
       ) 
) AS distance 
FROM 
    buildings 
WHERE 
    (city='$cities[0]' OR city='$cities[1]') 
    AND re='$re2' 
    AND status='$status2' 
    AND size='$size2' 
HAVING 
    distance < 25 
ORDER BY 
    distance 
LIMIT 
    0 , 20 
        "); 
+6

有沒有試過寫*多行*語句? – 2012-03-15 14:27:26

+0

嘗試'回顯'您的查詢來查看從服務器請求的實際內容。另外,請確保請求的數據存在於數據庫中...... **另外**:使用'HAVING'是非常不必要的。 'HAVING'主要用於'GROUP'和聚合函數('SUM','COUNT'等等) – 2012-03-15 14:27:52

+0

這就是爲什麼你會得到一行 – phpmeh 2012-03-15 14:29:27

回答

1

您的要求的約束,不僅你的$城市項目也受到

AND re='$re2' AND status='$status2' AND size='$size2' 

而且還通過

HAVING distance < 25 

可能失蹤城市entrie不符合上述任何一條約束,它不會在請求結果中。

+0

多數民衆贊成我最初的想法,但我檢查數據庫,並有記錄存在這個特定的查詢,但它只能返回一個城市 – 2012-03-15 14:29:49

+0

你確定$城市PHP數組的內容(空格或無人值守空值)可能來吧。 – dweeves 2012-03-15 14:44:38

+0

@Nic:你也可以嘗試刪除'LIMIT 0,20'部分。也許這是原因。 – 2012-03-15 14:48:40