在CodeIgniter中一起使用%like%和JOIN

时间:2011-08-02 08:46:57

标签: php codeigniter join search sql-like

我有三个表:'用户','产品'和'product_types'。 “用户”表存储有关我的网站用户的所有常用数据(包括id列); “产品”表格列出了产品的product_id,添加产品的用户的user_id以及product_type; 'product_types'表有一个id列(与'products'表中的product_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声明......但是它只显示了大部分时间的第一行 - 其他时候它返回没有结果。谁能告诉我哪里出错?

2 个答案:

答案 0 :(得分:2)

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

    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%' 

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

答案 1 :(得分:1)

我对调试查询的操作是首先从顶部查询开始,然后查看结果。然后我向它添加一个语句并再次查看结果。

因此,对于您的情况,您可以从简单的情况开始:

$this->db->select('users.*');
$this->db->from('users');

查看结果,然后添加另一个语句:

$this->db->select('users.*');
$this->db->from('users');
$this->db->like('users.company_name',$string,'both');

执行此操作,直到最终形成整个查询。

重点是你会发现什么声明正在过滤你的其他预期结果。这也可以向后完成。