使用联接进行Radius感知标记搜索

时间:2013-05-31 09:49:09

标签: php sql codeigniter join

我正在尝试编写一个基于标签的搜索,该搜索按照距离中心纬度较长的距离对结果进行排序,并且还限制在半径范围内。我不知道如何编写将加入必要表的SQL并按半径填充过滤。

我已经使用codeiginiters活动记录编写了第一个非半径感知查询,如下面的注释代码所示,这将生成$ sql中显示的SQL。

public function search_subjects_tag_radius($string, $lat = null, $lon = null, $rad=null){   

        /*
        $this->db->where("subject_tags.string_en","$string");
        $this->db->from('subject_tags');
        $this->db->join('subject_to_tag', 'subject_to_tag.tag_id = subject_tags.id');
        $this->db->join('subject', 'subject.id = subject_to_tag.subject_id');
        $this->db->limit("10");
        $result = $this->db->get();
        return $result -> result_object();
        */

        $sql = "SELECT *
        FROM (`subject_tags`)
        JOIN `subject_to_tag` ON `subject_to_tag`.`tag_id` = `subject_tags`.`id`
        JOIN `subject` ON `subject`.`id` = `subject_to_tag`.`subject_id`
        WHERE `subject_tags`.`string_en` =  '%$string%'
        LIMIT 10
        ";


        $result = $this->db->query($sql)->result_object();

        return $result; 

        return $result;
    }

这是我用来按标题进行半径搜索的工作代码(没有连接:

$sql2 = "SELECT *, ( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( subject.long ) - radians($lon) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) )
        AS distance 
        FROM subject 
        WHERE `title` LIKE '%$string%' 
        OR `address` LIKE '%$string%'
        HAVING distance < 10 ORDER BY distance LIMIT 6";

表关系设置: Table relationship

我想将$ sql2中的radius功能添加到$ sql中的查询中,如果你有任何想法,想知道如何写这个id,我想知道!

感谢。

0 个答案:

没有答案