2013-03-02 51 views
0

我正在嘗試從特定半徑返回結果的搜索。我有第一步工作,但是當我試圖通過包括停止工作的第二個表來擴展結果時。我不認爲聯盟去,但IEFT,在更好地explaing什麼,我試圖做的方式:從使用有距離連接兩個表格的結果

SELECT *, 3956 * 2 * ASIN(SQRT(POWER(SIN((48.4284207 -abs(dest.lat)) * pi()/180/2),2) + COS(48.4284207 * pi()/180) * COS(abs(dest.lat) * pi()/180) * POWER(SIN((-123.3656444 - dest.lng) * pi()/180/2), 2))) 
     as distance 
FROM business dest having distance < 10500 and 
    (businessName LIKE '%web%') ORDER BY distance 
UNION 
(
SELECT b.* 
    FROM business b, keywords k 
    WHERE k.keyword 
    LIKE '%web%' and b.businessID=k.businessID 
) 

第二個表有兩個列的「關鍵詞」,然後FK到businessID第一張桌子。

+0

我不知道你是否知道,但如果你使用一個MyISAM表類型,MySQL有內置的計算距離的額外功能。 http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long-points – portforwardpodcast 2013-03-02 20:47:14

+0

我得到語法錯誤試圖使用JOIN SELECT *,3956 * 2 * ASIN(SQRT(POWER(SIN((48.4284207 -abs(dest.lat))* pi()/ 180/2),2)+ COS(48.4284207 * pi()/ 180)* COS(abs(dest.lat) * pi()/ 180)* POWER(SIN(( - 123.3656444 - dest.lng)* pi()/ 180/2),2)))作爲距離距離<10500的business business dest和(businessName LIKE'%web %'或bio LIKE'%web%')ORDER BY distance JOIN(SELECT b。* FROM business b,keywords k WHERE k.keyword LIKE'%web%'and b.businessID = k.businessID); – 2013-03-02 20:52:34

+0

Mahmut,給了我一個錯誤「#1221 - 不正確的使用UNION和ORDER BY」 – 2013-03-02 20:59:18

回答

1

從您的評論中的查詢看來,您似乎希望在鏈接的關鍵字表格中的businessName或相關關鍵字中找到具有「網絡」的某些行業。

如果是這樣,這樣的查詢應該這樣做:

SELECT DISTINCT dest.*, 3956 * 2 * ASIN(SQRT(POWER(SIN((48.4284207 -abs(dest.lat)) * pi()/180/2),2) + COS(48.4284207 * pi()/180) * COS(abs(dest.lat) * pi()/180) * POWER(SIN((-123.3656444 - dest.lng) * pi()/180/2), 2))) 
     AS distance 
FROM business dest 
LEFT JOIN keywords k 
ON k.businessID = dest.businessID 
WHERE dest.businessName LIKE '%web%' OR k.keyword LIKE '%web%' 
HAVING distance < 10500 
ORDER BY distance 
+0

我現在得到這個錯誤 「#1054 - 'where子句中'的未知列'距離' 我認爲這意味着它不是製造「距離」? – 2013-03-02 22:43:15

+0

您不能在計算值中使用「WHERE」,您需要像原始查詢中那樣使用「HAVING」。 – Niko 2013-03-02 23:37:28

+0

@Niko現在查詢已被糾正 – 2013-03-03 09:51:51

相關問題