Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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 通过主题id获取讲师姓名_Php_Mysql - Fatal编程技术网

Php 通过主题id获取讲师姓名

Php 通过主题id获取讲师姓名,php,mysql,Php,Mysql,大家好,我的mySQL查询有问题。请查看我的表格和当前查询 表“讲师” 表“主题” 我当前的查询 public function instructor(){ global $database; $sql = "SELECT instructors.firstname as firstname, instructors.lastname as lastname "; $sql .= "FROM subjects "; $sql .= "JOIN instructors "; $sql .= "W

大家好,我的mySQL查询有问题。请查看我的表格和当前查询

表“讲师”

表“主题”

我当前的查询

public function instructor(){
global $database;

$sql = "SELECT instructors.firstname as firstname, instructors.lastname as lastname ";
$sql .= "FROM subjects ";
$sql .= "JOIN instructors ";
$sql .= "WHERE subjects.id = instructors.subject_id";

$result = $database->query($sql);

while($instructor = $database->fetch_array($result)){
    if (isset($instructor['firstname']) && isset($instructor['lastname'])){
            return $instructor['lastname'] . " " . $instructor['firstname'];
    } else {
        return "N/A";
    }

    }
}
结果:

English    Juan Dela Cruz
Math       Juan Dela Cruz
Science    Juan Dela Cruz
编辑

当前sql:

public function instructor(){
global $database;

$sql = "SELECT  a.name, ";
$sql .= "COALESCE(CONCAT(b.firstname, ' ',b.lastname), 'N/A') as ins_name ";
$sql .= "FROM subjects a ";
$sql .= "LEFT JOIN instructors b ";
$sql .= "ON a.id = b.subject_id";

$result = $database->query($sql);

   while($instructor = $database->fetch_array($result)){
      return $instructor['ins_name'];
   }
}
结果

English    Juan Dela Cruz
Math       Juan Dela Cruz
Science    Juan Dela Cruz
它应该是什么:

English    Juan Dela Cruz
Math       Antonio Brigada
Science    N/A
调用讲师()函数


//这将显示所有主题
//这将显示每个科目的讲师

我希望任何人都能帮助我看到上面的结果。

LEFT JOIN
是您所需要的

SELECT  a.name, 
        COALESCE(CONCAT(b.firstName, ' ',b.LastName), 'N/A')
FROM    subjects a
        LEFT JOIN instructors b
            ON a.ID = b.Subject_ID

您缺少一些代码。当你拿回第一条记录时,它会从讲师功能中返回,不是吗?我的意思是,我认为你需要发布更多的代码。我认为问题在于你的php,因为john的SQL很好。@arjay0601你现在得到了什么?@JohnWoo Same。所有科目仍然是胡安·德拉克鲁兹。关于如何调用讲师()函数的帖子更新。请看,这绝对是你的php。你永远不会告诉它该找哪门学科的讲师。所以它把所有的答案都拉回来,你每次只返回第一个答案。你应该让你的SQL做这项工作,让你的php输出结果,而不是在你的php中拼凑起来。为什么
合并
?这看起来是一个非常直接的一对一关系。@Starx甚至我的第一个查询都不起作用:(@Starx,因为这在约翰的回答中是一个例子,而不是一对一,这就是问题所在。合并是为了得到N/A。@arjay0601如何在php中调用讲师函数,因为它从一行返回一列,但结果显示两列和多行。@marvin post更新为调用我的讲师()作用
English    Juan Dela Cruz
Math       Antonio Brigada
Science    N/A
<?php foreach($subjects as $subject): ;?>
  <tr class="subject_list">
    <td><?php echo $subject->name; ?></td> // This will show all subjects
    <td><?php echo $subject->instructor(); ?></td> // This will show instructor foreach subjects
  </tr>
<?php endforeach; ?>
SELECT  a.name, 
        COALESCE(CONCAT(b.firstName, ' ',b.LastName), 'N/A')
FROM    subjects a
        LEFT JOIN instructors b
            ON a.ID = b.Subject_ID