【问题标题】:Codeigniter active record class join two mysql tablesCodeigniter活动记录类加入两个mysql表
【发布时间】:2014-07-26 12:26:07
【问题描述】:

只想从 reviews 表中获取 user_idreview_text 值,选择 namecity id=user_idusers 中提取,然后将 review_text、usernamecity 返回给控制器。请帮帮我。

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;
    }
   } 

更新 1: 我只是尝试加入表格,但它只返回 review_text 的值,但我还想获取 namecity 的值。请检查以下代码:

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;
    }
   }

【问题讨论】:

  • 您能详细解释一下您的更新代码问题吗?
  • 它只返回 review_text 的值,但我还想获取 namecity 的值。跨度>

标签: php mysql codeigniter


【解决方案1】:

我认为您需要在 SQL 中使用 join 查询。如果您使用此代码,您可以访问您想要的内容

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

有关如何在 codeigniter 中编写连接查询(左、内或右)的更多信息,您可以查看link

我希望这段代码能解决你的问题


更新

在您的新问题中。你的代码有一点错误。您需要以这种方式编写您的选择

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;
    }
   }

在codeigniter中选择活动记录;仅由 , 分隔的任何列名(而不是由 ', 分隔)

在 codeigniter documentation 中写道

允许您编写查询的 SELECT 部分:

$this->db->select('标题、内容、日期');

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

// 产生:SELECT title, content, date FROM mytable

【讨论】:

  • 感谢您的回答,请检查我的问题的更新。
  • 你太棒了!它现在返回所有值。非常感谢您的帮助:)
【解决方案2】:

您可以使用以下方法获取user_id 的值:

$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);

也使用相同的$this->db->get(); 来获取第二个查询的值。一旦你得到一个变量中的值,你就可以迭代它。比如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多