我正在研究search功能。
我创建了一个搜索表单,用户可以在其中搜索基于TypeopeFormate的应用程序。

我在加入查询中使用了子查询来获得所需的结果。
我已经在MySQL Workbench中测试了我的查询,但工作正常。

但是,当我使用查询生成器技术在Codeigniter中尝试相同的查询时,我遇到了一个问题。

这是在工作台中可以正常工作的查询:

SELECT (*)
FROM `App`
LEFT JOIN `App_type`
ON `App_type`.`app_id` = `App`.`id`
LEFT JOIN `App_formate`
ON `App_formate`.`app_id` = `App`.`id`
WHERE `App`.`id` IN(select app_id FROM App_type WHERE type_id in (3,2,6) group by app_id HAVING COUNT(*) = 3)
AND `App_formate`.`formate_id` IN('1', '3')
AND `jobs`.`ope_min` <= '3'
AND `jobs`.`ope_max` >= '3'
GROUP BY `jobs`.`id`;

这是我使用的联接查询:
$subquery = "select app_id FROM App_type WHERE type_id in ($selected_type) group by app_id HAVING COUNT(*) = $type_count";

$search_app_query = $this->db
    ->select('*')
    ->from('App')
    ->join('App_type', 'App_type.app_id = App.id', 'left outer')
    ->join('App_formate', 'App_formate.app_id = App.id', 'left outer')
    ->where_in('App.id',$subquery)  //<-- Here is the problem
    ->where_in('App_formate.formate_id',$data['selected_formates'])
    ->where('App.ope_min <=',$data['ope_value'])
    ->where('App.ope_max >=',$data['ope_value'])
    ->group_by("App.id", "desc")
    ->get();

当我调试此问题时,它显示了
 I have found the problem is in this part of the query:
 "WHERE `App`.`id` IN('select app_id
 FROM App_type
 WHERE type_id in (3,2,6)
 group by app_id HAVING COUNT(*) = 3')"

该子查询中的单引号引起了问题。

到目前为止我尝试过的是:

为了删除这个单引号,我尝试了
  • REPLACE($subquery, '''', '')
  • ->where_in('App.id',trim($subquery,"'"))
  • $subquery_improved = substr($subquery, 1, -1);

  • 但是所有这些解决方案都行不通。他们没有删除单引号。

    注意:我知道$this->db->query(),但不想使用它。

    最佳答案

    您的任务看起来很简单

    代替

    ->where_in('App.id',$subquery)  //<-- Here is the problem
    

    您可以尝试以下
    ->where("App.id IN (".$subquery.")",NULL, false)
    

    10-08 12:41