Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用逗号分隔值的Codeigniter搜索_Php_Codeigniter - Fatal编程技术网

Php 使用逗号分隔值的Codeigniter搜索

Php 使用逗号分隔值的Codeigniter搜索,php,codeigniter,Php,Codeigniter,我试图使用codeigniter框架实现高级搜索。我有一个搜索框,其中有几个图标作为搜索基础。然后,如果用户试图找到一个图标,例如一个停车场的图标,它应该显示所有具有该图标的配置文件。如果用户点击更多图标,例如停车场、啤酒、情侣佳肴……只有具备这些特征的配置文件才会显示 数据库信息: ----------------------------------------------------- place_id icon_ids ------------------------

我试图使用codeigniter框架实现高级搜索。我有一个搜索框,其中有几个图标作为搜索基础。然后,如果用户试图找到一个图标,例如一个停车场的图标,它应该显示所有具有该图标的配置文件。如果用户点击更多图标,例如停车场、啤酒、情侣佳肴……只有具备这些特征的配置文件才会显示

数据库信息:

-----------------------------------------------------
place_id            icon_ids
-----------------------------------------------------
1                 1,2,3,4,5,6,7,8
2                 1,2,3,7,9
3                 1,3,4      
4                 1,2,4,5,9,10
5                 1,2,3,5,6,8,9,10
-----------------------------------------------------
型号

public function get_search_content($info_id, $search_queries, $query_type, $limit, $start, $action_type)
    {
        if($query_type === 'icons')
        {

            $count_id = explode(',', $info_id);
            $count_id = count($count_id);

            if($count_id > 1)
            {

                $search  = "lai.info_id IN (".$info_id.")";


                $query = $this->db->select('*, c.id AS cat_id, bh.id AS hour_id, bh.place_id AS bh_place_id, c.name AS cat_name, l.place_id AS place_id, lai.place_id AS lai_place_id')

                ->where($search)

                ->join('listing_additional_info lai', 'lai.place_id=l.place_id', 'LEFT')
                ->join('cities cy', 'cy.city_id=l.city_id', 'LEFT')
                ->join('cats c', 'c.parent_id=l.cat_id', 'LEFT')
                ->join('business_hours bh', 'bh.place_id=l.place_id', 'LEFT')
                ->group_by('lai.place_id', 'ASC')
                ->limit($limit, $start)
                ->get('listings l');
            }
            else
            {

                $search  = "FIND_IN_SET('".$info_id."', lai.info_id)";

                $query = $this->db->select('*, c.id AS cat_id, bh.id AS hour_id, bh.place_id AS bh_place_id, c.name AS cat_name, l.place_id AS place_id, lai.place_id AS lai_place_id')
                ->distinct()
                ->where($search)

                ->join('listing_additional_info lai', 'lai.place_id=l.place_id', 'LEFT')
                ->join('cities cy', 'cy.city_id=l.city_id', 'LEFT')
                ->join('cats c', 'c.parent_id=l.cat_id', 'LEFT')
                ->join('business_hours bh', 'bh.place_id=l.place_id', 'LEFT')
                ->group_by('lai.place_id', 'ASC')
                ->limit($limit, $start)
                ->get('listings l');
            }


        }
}

public function m_search_queries($limit, $start)
    {

        // $info_id = $this->input->get('info_id');
        $info_id = $this->input->get('info_id_');

        $search_queries = $this->input->get('q');

        $submit_search = $this->input->get('submit_search');

        if($submit_search == 'true')
        {
            if(!empty($info_id))
            {

                    echo $this->get_search_content($info_id, $search_queries, 'icons', $limit, $start, 'content');


            }
            elseif(!empty($search_queries))
            {
                echo $this->get_search_content($info_id, $search_queries, 'input', $limit, $start, 'content');

            }
            else
            {
                $rs = '';
                $rs .= '<div class="bg bg-info text-white p-3">Sorry, we could not find what you are looking for.</div>';

                echo $rs;
            }
        }

    }
公共函数获取搜索内容($info\u id、$search\u querys、$query\u type、$limit、$start、$action\u type)
{
如果($query_type==='icons')
{
$count_id=分解(“,”,$info_id);
$count\u id=count($count\u id);
如果($count\u id>1)
{
$search=“lai.info\u id IN(“.$info\u id.”)中的“;
$query=$this->db->select('*,c.id作为cat\u id,bh.id作为hour\u id,bh.place\u id作为bh\u place\u id,c.name作为cat\u name,l.place\u id作为place\u id,lai.place\u id作为lai\u place\u id'))
->where($search)
->加入('listing\u additional\u info lai','lai.place\u id=l.place\u id','LEFT')
->加入('cities cy','cy.city\u id=l.city\u id','LEFT')
->加入('cats c','c.parent\u id=l.cats\u id','LEFT')
->加入('business\u hours bh','bh.place\u id=l.place\u id','LEFT')
->分组人('lai.place\u id','ASC')
->限额($limit$start)
->获取('l');
}
其他的
{
$search=“在集合中查找(“$info\u id.”,lai.info\u id)”;
$query=$this->db->select('*,c.id作为cat\u id,bh.id作为hour\u id,bh.place\u id作为bh\u place\u id,c.name作为cat\u name,l.place\u id作为place\u id,lai.place\u id作为lai\u place\u id'))
->不同的()
->where($search)
->加入('listing\u additional\u info lai','lai.place\u id=l.place\u id','LEFT')
->加入('cities cy','cy.city\u id=l.city\u id','LEFT')
->加入('cats c','c.parent\u id=l.cats\u id','LEFT')
->加入('business\u hours bh','bh.place\u id=l.place\u id','LEFT')
->分组人('lai.place\u id','ASC')
->限额($limit$start)
->获取('l');
}
}
}
公共函数m_搜索_查询($limit,$start)
{
//$info_id=$this->input->get('info_id');
$info_id=$this->input->get('info_id');
$search_querys=$this->input->get('q');
$submit_search=$this->input->get('submit_search');
如果($submit\u search=='true')
{
如果(!空($info_id))
{
echo$this->get_search_content($info_id,$search_querys,'icons',$limit,$start,'content');
}
elseif(!empty($search\u querys))
{
echo$this->get_search_content($info_id,$search_querys,'input',$limit,$start,'content');
}
其他的
{
$rs='';
$rs.=“对不起,我们找不到您要找的内容。”;
echo$rs;
}
}
}
查看

<form method="GET" action="<?= base_url().lang(); ?>/search" class="">
        <div class="mb-2" id="add-data-info">
           <?php for($i=1; $i<=13; $i++){ ?>
           <div class="btn add_selector search_add_selector search_add_selector_<?= $i; ?> search_add_info_view">
            <input type="checkbox" value="<?= $i; ?>" class="search_add_info">
            <img id="" class="svg" src="<?= base_url(); ?>theme/myown/img/icon/svg/<?= $i; ?>.svg?<?= time(); ?>" width="28">
           </div>
          <?php } ?>
          <div class="my-2">
          <div class="w-100 border border-muted my-4"></div>
           <input type="hidden" name="query_type" value="icons">
           <button type="submit" name="submit_search" class="btn btn-info btn-lg btn-rounded" value="true">Search</button>
          </div>
        </div>
        <input type="hidden" id="search_selected_additional" name="info_id_">
</form>

我已经创建了它,并在我的环境中进行了测试,它就像一个魔咒:

    $this->db->select('whatever')->from('your_table');
    $this->db->group_start();
    foreach($selected_values as $value)
    {
        $this->db->where("find_in_set($value, icon_ids)");
    }
    $this->db->group_end();
    $result = $this->db->get()->result_array();

我用你的值再次测试了它,它在(1,2,5)上运行得很好,它显示(1,4,5)

我想你必须重新设计你的数据库,目标是n:m关系模型看看这里()-你的设计被认为是非常糟糕的-因为你没有使用现代RDBMS的优点(你正在打破第一个正常形式…)-如果您拒绝并希望保留您的版本-无论出于何种原因-请查看此处可能的@sintakonte副本谢谢您的回复。我转到了您提供的链接。你能给我至少一个示例代码吗。我不太明白这一点:
WHERE CONCAT(“,”,
setcolumn
,“,”)REGEXP“,(val1 | val2 | val3),“
在我这方面似乎不起作用。我真的是这个框架的新手。谢谢!我的模型中有以下代码:
$search=“FIND_in_SET”(“$info_id.”,lai.info_id)”$query=$this->db->select('*,CONCAT(,“,”lai.info_id“,”,“,”)REGEXP“,('.$info_id.'.$info_id.'.'.$info_id.'),”)->where($search)->group_by('lai.place_id',ASC')->limit limit($limit,$start)->get('listings l')
@johnlopev this
当CONCAT(“,”,
setcolumn
,“,”)REGEXP“,(val1 | val2 | val3),“
在mySQL上时,您需要将这三个值传递到一个查询中,这对CodeIgniter来说并不特殊。。它是纯PHP。话虽如此,我强烈建议您重新思考并重新建模您的数据库,以更好地利用您的RDBMS。。。最好现在就做,早一点,而不是晚一点,那时你会经历更多的痛苦(见@sintakonte的第一条评论)哦!。。我想它起作用了我只是他妈的没意识到它起作用了!谢谢兄弟!你救了我一天!:D
    $this->db->select('whatever')->from('your_table');
    $this->db->group_start();
    foreach($selected_values as $value)
    {
        $this->db->where("find_in_set($value, icon_ids)");
    }
    $this->db->group_end();
    $result = $this->db->get()->result_array();