2017-08-19 51 views
1

在mysql中我計算兩個郵政編碼之間的所有點,這對我來說工作得很好。現在我想更新該查詢來加入一個額外的表格,但我收到一個錯誤。下面是查詢請看看:使用加入距離搜索和mysql

SELECT * 
FROM users 
INNER JOIN 
    (SELECT *, 
      ACOS(
        COS(RADIANS(30.7261629)) 
       * COS(RADIANS(lat_collection)) 
       * COS(RADIANS(76.7596221) - RADIANS(`long_collection`)) 
       + SIN(RADIANS(30.7261629)) 
       * SIN(RADIANS(lat_collection)) 
      ) * 3956 AS `distance` 
    FROM quote q 
    WHERE lat_collection BETWEEN 30.7261629 - (30/69) AND 30.3345816 + (30/69) 
    AND `long_collection` BETWEEN 76.7596221 - (30/(69 * COS(RADIANS(30.7261629)))) AND 78.0537813 + (30/(69* COS(RADIANS(30.7261629)))) 
    ) AS u 
ON q.user_id=u.id 
WHERE `distance` < 30 

我需要在同一個查詢中加入四五表;我怎樣才能做到這一點?嘗試加入表格時出現錯誤(我有兩個郵政編碼,然後計算兩個郵政編碼的長度)。

回答

0
SELECT * 
    FROM users inner join (
    SELECT *, 3956 * ACOS(COS(RADIANS(30.7261629)) * COS(RADIANS(lat_collection)) * COS(RADIANS(76.7596221) - 
    RADIANS(`long_collection`)) 
     + SIN(RADIANS(30.7261629)) * SIN(RADIANS(lat_collection))) AS `distance` 
    FROM quote q 
    WHERE lat_collection BETWEEN 30.7261629 - (30/69) AND 30.3345816 + (30/69) 
    AND `long_collection` BETWEEN 76.7596221 - (30/(69 * COS(RADIANS(30.7261629)))) AND 78.0537813 + (30/(69* COS(RADIANS(30.7261629)))) 
    ) as u on users.id=u.user_id 
    WHERE (3956 * ACOS(COS(RADIANS(30.7261629)) * COS(RADIANS(lat_collection)) * COS(RADIANS(76.7596221) - RADIANS(`long_collection`)) 
     + SIN(RADIANS(30.7261629)) * SIN(RADIANS(lat_collection)))) < 30 
1

您使用在條件..這是不允許的,你必須重用的完整代碼,而不是別名

SELECT * 
    FROM users inner join (
    SELECT *, 3956 * ACOS(COS(RADIANS(30.7261629)) * COS(RADIANS(lat_collection)) * COS(RADIANS(76.7596221) - 
    RADIANS(`long_collection`)) 
     + SIN(RADIANS(30.7261629)) * SIN(RADIANS(lat_collection))) AS `distance` 
    FROM quote q 
    WHERE lat_collection BETWEEN 30.7261629 - (30/69) AND 30.3345816 + (30/69) 
    AND `long_collection` BETWEEN 76.7596221 - (30/(69 * COS(RADIANS(30.7261629)))) AND 78.0537813 + (30/(69* COS(RADIANS(30.7261629)))) 
    ) as u on users.id=u.user_id 
    WHERE (3956 * ACOS(COS(RADIANS(30.7261629)) * COS(RADIANS(lat_collection)) * COS(RADIANS(76.7596221) - RADIANS(`long_collection`)) 
     + SIN(RADIANS(30.7261629)) * SIN(RADIANS(lat_collection)))) < 30 
+0

感謝您的ANS的別名,但是當我運行查詢它說:「未知'on子句'中的'q.user_id'列。它不承認列。 – Ashok

+0

回答更新刪除表名稱的無用別名..但你確定你有一個名爲user_id在表引號列? – scaisEdge

+0

是的,我在表中引用該列 – Ashok