我有两个数据库表 quotations
和 garag
。两个表都有 lat, lng 字段。
我必须根据特定定义的半径向附近的车库显示报价。
为此,我必须从报价表中获取lat,lng并将其与车库表的lat,lng相匹配
我可以在 CI 中使用以下查询获取附近的车库
$sql = "SELECT *, ( 3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM garage HAVING distance < 25";
$result = $this->db->query($sql) ;
但我不确定如何将它与请求的经纬度报价联系起来
你能帮我一下吗
最佳答案
SELECT
Q.*
FROM garage g
LEFT JOIN quotes q
ON SQRT(SQUARE(ABS(q.lat - g.lat)) + SQUARE(ABS(q.lng - g.lng))) <= @MaxDistanceInDegrees
WHERE g.id = @GarageID
这应该有效。请注意,如果您有一个大型数据库,这个问题会变得更加复杂,您可能需要创建某种网格系统来缓解 n^2 问题。
关于php - 编码间 : joining 2 tables based on 2 parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306722/