Codeinginter:基于2个参数加入2个表

时间:2017-07-25 14:48:17

标签: php mysql sql codeigniter

我有两个数据库表quotationsgarag。两个表都有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

联系起来

你可以帮我吧吗

2 个答案:

答案 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');