根据子查询中返回的id并在保持该顺序的基础上对多个表进行连接

时间:2016-03-10 03:03:31

标签: mysql join stored-procedures

这是一个棘手的问题(或者我认为)。我有一个如下所示的存储过程:

SELECT DISTINCT...

当被调用时,它返回具有最接近给定纬度/经度的点的项目的ID,尽管这些细节可能并不重要。鉴于我现在的结果,我能够围绕WHERE IN查询创建外部查询,该查询将获得具有那些给定id的所有项目,并基于项目id与其他几个表连接。我知道我可以使用window.open(url,"_system"),但我放弃了ID的顺序(顺序很重要)。

在一个请求中执行此操作的任何SQL方法?我能想到的最佳选择是将这些ID存储在临时表中,然后根据project_id对其进行选择/连接。

1 个答案:

答案 0 :(得分:0)

我认为您可以在外部查询中使用group byorder by执行您想要的操作:

SELECT project_id
FROM (SELECT project_id,
             ROUND((6371 * ACOS(COS(RADIANS(_lat)) * COS(RADIANS(`lat`)) * COS(RADIANS(`long`) - RADIANS(_lng)) + SIN(RADIANS(_lat)) * SIN(RADIANS(`lat`)))), 2) AS distanc
      FROM geodata
      WHERE (`long` BETWEEN @lng_min AND @lng_max) AND
            (`lat` BETWEEN @lat_min and @lat_max)
     ) gd
GROUP BY project_id
ORDER BY MIN(CAST(distance as DECIMAL(10,5))) ASC;