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值)和一个varcharname
列
我想在“用户”表中执行%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查询。