基于规则的作业查找器分类算法

时间:2017-03-05 05:21:37

标签: php mysql algorithm

询问的借口,但我试图使用基于规则的分类算法来制作搜索系统,但问题是我似乎无法找到如何实现它。

我脑子里有个主意。首先,使用php select语句生成数据,然后测试所有数据是否与用户的输入匹配。我是否正确,或者有什么不对劲。

1 个答案:

答案 0 :(得分:0)

假设您要根据输入创建规则,然后以邮寄或URL(首选URL)将数据发送到搜索查询。你的形式会是这样的 enter image description here

发送它时的四个假设规则会创建像

这样的搜索网址

enter image description here

您将创建类似这样的搜索功能

public function search_item($data,$per_page,$offset=0)
{
    $term_q='';
    $loc_q='';
    $pur_q='';
    if($per_page==0)
    {
        $limit_q='';
    }
    else
    {
        $limit_q='LIMIT '.$offset.','.$per_page;
    }

    if($data['keyword']!='')
    {$term_q='AND (property.title LIKE "%'.addslashes($data['keyword']).'%" OR property.description LIKE "%'.addslashes($data['keyword']).'%" OR property.city LIKE "%'.addslashes($data['keyword']).'%") ';}
    if($data['location']!='')
    {
        $loc_q=' AND (property.location LIKE "%'.addslashes($data['location']).'%" OR property.title LIKE "%'.addslashes($data['location']).'%" OR property.description LIKE "%'.addslashes($data['location']).'%" OR property.city LIKE "%'.addslashes($data['location']).'%") ';
    }
    if($data['purpose']!='')
    {
        $pur_q=' AND property.purpose LIKE "%'.addslashes($data['purpose']).'%" ';
    }
    $data=$this->db->query("SELECT property.*, users.name as posted_by, property_types.name as property_type
                      from property
                      inner join users on users.id=property.posted_by
                      inner join property_types on property_types.id=property.type

                      WHERE property.status='approved'
                      {$term_q}
                      {$loc_q}
                      {$pur_q}
                      {$limit_q}
                      ")->result_array();
    //print_r($this->db->last_query());exit;
    for($i=0;$i<count($data);$i++)
    {
        $data[$i]['images']=$this->db->query('SELECT * from property_images WHERE property_images.property_id='.$data[$i]['id'])->result_array();
    }

    return $data;
    //return $this->db->last_query();
}

在Codeigniter框架中重写语法,但我会向你解释。函数中的data参数是从URL获取的,发送到从$ _REQUEST获取的此函数。 $ per_page和$ offset用于分页。

现在,搜索算法只不过是一个大的SELECT查询,其中包含一些小子句,这些子句定义了基于您的数据进行过滤的规则。如果您在函数中看到

$term_q='';
$loc_q='';
$pur_q='';
if($per_page==0)
{
    $limit_q='';
}
else
{
    $limit_q='LIMIT '.$offset.','.$per_page;
}

if($data['keyword']!='')
{$term_q='AND (property.title LIKE "%'.addslashes($data['keyword']).'%" OR property.description LIKE "%'.addslashes($data['keyword']).'%" OR property.city LIKE "%'.addslashes($data['keyword']).'%") ';}
if($data['location']!='')
{
    $loc_q=' AND (property.location LIKE "%'.addslashes($data['location']).'%" OR property.title LIKE "%'.addslashes($data['location']).'%" OR property.description LIKE "%'.addslashes($data['location']).'%" OR property.city LIKE "%'.addslashes($data['location']).'%") ';
}
if($data['purpose']!='')
{
    $pur_q=' AND property.purpose LIKE "%'.addslashes($data['purpose']).'%" ';
}

上面的部分定义了所有规则,然后嵌入主查询中以获取过滤后的数据。所以你看到它非常简单,你所要做的就是定义你的规则。通过某种形式或通过自己发送它们来获取它们,然后处理这些规则以创建查询,最后执行该查询以从数据库中获取结果。