我有两个数据库表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) ;
但我不知道如何将它与请求引用lat,lng
联系起来你可以帮我吧吗
答案 0 :(得分:0)
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问题。
答案 1 :(得分:0)
我没有在我这边测试过这个查询,但我认为这有助于实现你想要的结果。我在这里添加了两种技术。
$query = $this->db
->select('*') // Add your require column name as you want
->from('garage as g')
->join('distance as d1', 'd1.lat = g.lat', 'left outer')
->join('distance as d2', 'd2.lng = g.lng', 'left outer')
//->where('g.column', $variable)
->get();
// OR Try this way using and
->join('distance as d1', 'd1.lat = g.lat AND d1.lng = g.lng');