简体   繁体   中英

Codeigniter active record class join two mysql tables

Just want to get user_id and review_text values from table reviews , select name and city from table users where id=user_id and then return review_text, username and city to controller. Please help me.

public function did_get_reviews($item_id){

    $this->db->select('user_id','review_text');
    $this->db->from('reviews');   
    $this->db->where('post_id', $item_id);

    $user_id = 'user_id' //??

    $this->db->select('name','city');
    $this->db->from('users');   
    $this->db->where('id', $user_id);

    $query = $this->db->get('review_text','username','city'); //??

    if ($query && $query->num_rows() >= 1){
    return $query->result();
    }
    else {
    return false;
    }
   } 

Update 1: I just tried to join tables but it returns the values for review_text only but I also want to get values for name and city . Please check the code below:

public function did_get_reviews($item_id){

    $this->db->select('reviews.review_text','users.name','users.city');
    $this->db->from('reviews','users');   
    $this->db->where('reviews.post_id', $item_id);
    $this->db->join('users','reviews.user_id = users.user_id');

    $query = $this->db->get();

    if ($query && $query->num_rows() >= 1){
    return $query->result();
    }
    else {
    return false;
    }
   }

i think you need to use join query in SQL. if you use this code you can access to what you want

$result = $this->db->select('review, username, city')
            ->from('reviews')
            ->join('city', 'city.user_id = review.user_id')
            ->get();
print_r($result);

for more information about how you can write join query(left, inner or right) in codeigniter you can see this link

i hope that this code solve your problem


UPDATE

in your new question. your code have a little buggy. you need to write your select in this way

public function did_get_reviews($item_id){

    $this->db->select('reviews.review_text,users.name,users.city')
             ->from('reviews','users')   
             ->where('reviews.post_id', $item_id)
             ->join('users','reviews.user_id = users.user_id');

    $query = $this->db->get();

    if ($query && $query->num_rows() >= 1){
    return $query->result();
    }
    else {
    return false;
    }
   }

in codeigniter select Active record; any column name separate with each other by , only (not by ' and , )

in codeigniter documentation wrote that

Permits you to write the SELECT portion of your query:

$this->db->select('title, content, date');

$query = $this->db->get('mytable');

// Produces: SELECT title, content, date FROM mytable

You can get the value for user_id using:

$this->db->select('user_id','review_text');
$this->db->from('reviews');   
$this->db->where('post_id', $item_id);
$result = $this->db->get();
print_r($result);

use the same $this->db->get(); to get the values of the second query as well. Once you get the values inside a variable you can iterate it. Something like:

foreach ($result->result() as $row)
{
    echo $row->name;
    echo $row->city;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM