Я работаю над функциональностью search
.
Я создал форму поиска, в которой пользователь может искать приложение на основе Type
, ope
и Formate
.
Я использовал подзапрос в моем запросе join, чтобы получить желаемый результат.
Я тестировал свой запрос в MySQL Workbench
и работал нормально.
Но когда я попробовал тот же запрос в Codeigniter, используя технику построения запросов, я столкнулся с проблемой.
Вот запрос, который отлично работает в workbench:
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()
, но не хочу этого использовать.