我正在嘗試從特定半徑返回結果的搜索。我有第一步工作,但是當我試圖通過包括停止工作的第二個表來擴展結果時。我不認爲聯盟去,但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第一張桌子。
我不知道你是否知道,但如果你使用一個MyISAM表類型,MySQL有內置的計算距離的額外功能。 http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long-points – portforwardpodcast 2013-03-02 20:47:14
我得到語法錯誤試圖使用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
Mahmut,給了我一個錯誤「#1221 - 不正確的使用UNION和ORDER BY」 – 2013-03-02 20:59:18