php - How to get nested Selects in a where_in clause in CodeIgniter's datamapper? -


i have mysql query i've gotten work in phpmyadmin/mysql workbench.

select * (`medfacts`)     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`     title in (      select medfacts.title medfacts     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`      categories_medfacts.category_id = 2     )      or title in (      select medfacts.title medfacts     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`      categories_medfacts.category_id = 3     )  

(the query gets medfacts listed in join table categories_medfacts given category ids.)

i need transfer codeigniter project in way allows program add many having clauses needed. have far generates query right.

function list_by_category($cat, $module) {     /* list of medfacts entries have category.         *      */     $this->db->join('categories_medfacts', 'categories_medfacts.medfact_id = medfacts.id');     $this->where('medfacts.module_id', $module);     /* if category array, articles fall under categories.      * shouldn't more handful deep.      */     if (is_array($cat)) {         foreach ($cat $field => $value) {             $this->where_in('title', "select medfacts.title medfacts join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id` categories_medfacts.category_id = {$value}");         }     } else {         $this->where('categories_medfacts.category_id', $cat);     }     $this->select('medfacts.title');     return $this->get(); } 

however, can't not escape nested select statements, , end this:

select `medfacts`.`title` (`medfacts`) join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id` (  `medfacts`.`module_id` = '2' , `medfacts`.`title` in ('select medfacts.title medfacts join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id` categories_medfacts.category_id = 2')  , `medfacts`.`title` in ('select medfacts.title medfacts join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id` categories_medfacts.category_id = 3')   ) , `medfacts`.`site_id` = 1   

notice quotes around nested select in in clause.

is there way datamapper not escape nested select? or, there better way achieve same goal? or stuck writing query myself?

i'm using ci 1.7.2 , datamapper dmz 1.7.1 (updating out of question) on php5 severs.

edit: aware simple or where return articles match each where case. however, that's not need. need results fall under given categories. current setup, or where returns many results (includes ones fall under 1 of listed categories), , and where doesn't return (nor ever, category_id can't both "2" , "3").

also, found join, such below works in mysql, can't translate ci, either (i didn't post it, because thought where in above cleaner method).

select *     (`medfacts`)     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`     join (         select medfacts.title, medfacts.id medfacts     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`         categories_medfacts.category_id = 2     )  m1     on m1.id = medfacts.id      join (         select medfacts.title, medfacts.id medfacts     join `categories_medfacts` on `categories_medfacts`.`medfact_id` = `medfacts`.`id`         categories_medfacts.category_id = 3     ) m2     on m2.id = medfacts.id     `medfacts`.`module_id` = '2'     , medfacts.site_id = 1 

there 1 way found perform subselects in ci - http://heybigname.com/2009/09/18/using-code-igniters-active-record-class-to-create-subqueries/

however, time ago have been warned skilled programmer (my boss :d) subselects quite slow , performing multiple separate selects or trying join instead (where possible) quicker... didn't have opportunity benchmark it, take minor suggestion :)


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -