codeigniter,连接表属性会覆盖其他属性

时间:2018-03-27 12:55:13

标签: php sql codeigniter

我正在使用codeigniter 3处理项目,我有以下查询

$this->db->select("*");
$this->db->from("questions");
$this->db->join('users', 'users.id = questions.user_id');
$this->db->where('article_id', $articleId);
$this->db->order_by('questions.id', 'DESC');
$query = $this->db->get();
return $query->result();

// query
// SELECT * FROM `questions` JOIN `users` ON `users`.`id` = `questions`.`user_id` WHERE `article_id` = 18 ORDER BY `questions`.`id` DESC

目前,来自users表的id属性会覆盖问题id。问题的内容至关重要。

我担心,我将不得不编写一个我不太擅长的自定义查询。

2 个答案:

答案 0 :(得分:1)

尝试执行以下操作:

$this->db->select("*, questions.id as question_id");

很明显,将覆盖具有相同名称的属性。这就是为什么你应该在select语句中为它们分配'唯一'名称。

答案 1 :(得分:0)

您可以使用像< - p>这样的alies特别提及ID

$this->db->select("questions.id as question_id, users.id as user_id, questions.*, users.*");
$this->db->from("questions");
$this->db->join('users', 'users.id = questions.user_id');
$this->db->where('article_id', $articleId);
$this->db->order_by('questions.id', 'DESC');
$query = $this->db->get();
return $query->result();

这将为您提供以question_id,user_id和问题表命名的特定列,所有列,用户表的所有列

或者另一种更好的解决方案,如果需要,可以在选择中使用特定列名称。