Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sql命令执行不正确_Php_Mysql_Codeigniter_Codeigniter 3 - Fatal编程技术网

Php sql命令执行不正确

Php sql命令执行不正确,php,mysql,codeigniter,codeigniter-3,Php,Mysql,Codeigniter,Codeigniter 3,我的数据库中有两个表,分别是讲师和课程。我想加入他们,为此我写了这段代码 $this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left'); $query = $this->db->get_where('courses', array('courses_slug' => $slug)); return $query->row_array(); 该代码意味着: SE

我的数据库中有两个表,分别是讲师和课程。我想加入他们,为此我写了这段代码

$this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left');
$query = $this->db->get_where('courses', array('courses_slug' => $slug));
return $query->row_array();
该代码意味着:

SELECT * FROM `courses` LEFT JOIN `instructors` ON `instructors`.`id` = `courses`.`instructor_id` WHERE `courses_slug` = 'abituriyent-hazirligi'
但当我编写此代码来检查:

$data['courses'] = $this->popular_courses_model->get_popular_courses($slug);
echo $data['courses']['id'];
die();

它写的是讲师id,而不是课程id。问题出在哪里?提前感谢。

您正在连接两个具有相同名称“id”列的表。您需要在列的选择中指定,并在必要时重命名为“AS”

select courses.id as course_id, instructor.id as instructor_id, ...

使用联接时,应显式调用希望返回的列:

$select = "c.id, c.name, c.instructor_id, i.name instructor_name";

return $this->db->select($select)
//equivalent to "instructors as i" 
->join('instructors i', 'i.id = c.instructor_id', 'left')
->where('c.courses_slug', $slug)
//equivalent to "courses as c" 
->get('courses c')->row_array();

您使用的是哪个框架?Codeigniter3框架$data['courses']=。。。看起来很奇怪。。。如果函数返回行,那么您的回音对我来说没有意义。尝试转储函数的返回值并整体查看它。但是我需要为课程页面选择所有内容。我应该写所有的专栏吗?我很怀疑。ORM不能处理吗?我已经看到查询中使用的表前缀。假设取决于代码的意思,OP认为它的意思是什么…你可以用courses.*来速记,但你需要以你需要的方式处理重复的代码。好的。假设我在那里也误用了ORM。这只是构建SQL并返回数组,不是吗…非常感谢!没问题!随着您的发展,这种做法通常会加快您的需求,因为您添加的连接越多,从长远来看,它的速度就越慢,您对查询的思考越多,它处理一切的速度就越快