Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 使用%like%并在CodeIgniter中连接在一起_Php_Codeigniter_Join_Search_Sql Like - Fatal编程技术网

Php 使用%like%并在CodeIgniter中连接在一起

Php 使用%like%并在CodeIgniter中连接在一起,php,codeigniter,join,search,sql-like,Php,Codeigniter,Join,Search,Sql Like,我有三个表:“用户”、“产品”和“产品类型”。“用户”表存储有关我的站点用户的所有常用数据(包括id列);“产品”表列出了产品的产品id、添加它的用户的用户id、以及产品类型;“产品类型”表有一个id列(对应于“产品”表中的product\u typeint值)和一个varcharname列 我想在“用户”表中执行%like%搜索,这样当用户搜索产品类型时,它会显示所有拥有与搜索的产品类型匹配的产品的用户。以下是我目前在CodeIgniter模型中使用的内容: $string = urldeco

我有三个表:“用户”、“产品”和“产品类型”。“用户”表存储有关我的站点用户的所有常用数据(包括
id
列);“产品”表列出了产品的
产品id
、添加它的用户的
用户id
、以及
产品类型
;“产品类型”表有一个
id
列(对应于“产品”表中的
product\u type
int值)和一个varchar
name

我想在“用户”表中执行
%like%
搜索,这样当用户搜索产品类型时,它会显示所有拥有与搜索的产品类型匹配的产品的用户。以下是我目前在CodeIgniter模型中使用的内容:

$string = urldecode($string);
$this->db->select('users.*');
$this->db->from('users');
$this->db->like('users.company_name',$string,'both');
$this->db->or_like('users.address_1',$string,'both');
$this->db->or_like('users.city',$string,'both');
$this->db->or_like('users.contact',$string,'both');
$this->db->or_like('product_types.name',$string,'both');
$this->db->join('products','users.id = products.client_id');
$this->db->join('product_types','products.product_type = product_types.id');
$this->db->distinct();
$users = $this->db->get();
foreach($users->result() as $user){
   // search result
}

然后我把它输入到foreach语句中。。。但它大部分时间只显示第一行,其他时间返回时没有结果。有人能告诉我哪里出了问题吗?

我调试查询的方法是首先从顶部查询开始,然后查看结果。然后我向它附加一条语句,并再次查看结果

因此,对于您的案例,您可以从以下简单案例开始:

$this->db->select('users.*');
$this->db->from('users');
查看结果,然后添加另一条语句:

$this->db->select('users.*');
$this->db->from('users');
$this->db->like('users.company_name',$string,'both');
这样做直到最终形成整个查询


关键是你会发现什么样的语句在过滤你的其他预期结果。这也可以向后进行

我调试查询的方法是首先从顶部查询开始,然后查看结果。然后我向它附加一条语句,并再次查看结果

因此,对于您的案例,您可以从以下简单案例开始:

$this->db->select('users.*');
$this->db->from('users');
查看结果,然后添加另一条语句:

$this->db->select('users.*');
$this->db->from('users');
$this->db->like('users.company_name',$string,'both');
这样做直到最终形成整个查询


关键是你会发现什么样的语句在过滤你的其他预期结果。这也可以向后进行

我不明白您为什么要进行多个查询,它只能在一个查询中完成

    SELECT a.*,b.*,C.* FROM users a LEFT JOIN products b ON b.user_id = a.id LEFT JOIN product_types c ON b.product_type = c.id WHERE a.company_name LIKE '%$string%' OR a.address_1 LIKE '%$string%' OR a.city LIKE '%$string%' a.contact LIKE '%$string%' b.name LIKE '%$string%' 

这将为您提供具有该产品类型的用户的所有产品,请尝试在您的db上运行它,以查看它的运行情况。然后使用foreach语句获取结果

我不明白为什么要进行多个查询,它只能在一个查询中完成

    SELECT a.*,b.*,C.* FROM users a LEFT JOIN products b ON b.user_id = a.id LEFT JOIN product_types c ON b.product_type = c.id WHERE a.company_name LIKE '%$string%' OR a.address_1 LIKE '%$string%' OR a.city LIKE '%$string%' a.contact LIKE '%$string%' b.name LIKE '%$string%' 

这将为您提供具有该产品类型的用户的所有产品,请尝试在您的db上运行它,以查看它的运行情况。然后使用foreach语句获取结果

我正在使用foreach循环和result()。我刚刚编辑了我的问题以突出显示这一点。我正在使用foreach循环和result()。我刚刚编辑了我的问题,突出显示了这个try printing
$this->db->last_query()显示运行的SQL查询。请尝试打印
$this->db->last_query()显示已运行的SQL查询。