Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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 如何从一个表中选择数据并从另一个表中获取所有相关记录?_Php_Html_Mysql - Fatal编程技术网

Php 如何从一个表中选择数据并从另一个表中获取所有相关记录?

Php 如何从一个表中选择数据并从另一个表中获取所有相关记录?,php,html,mysql,Php,Html,Mysql,我试图尽可能地简化我的问题,我希望我的解释能澄清它的含义 情况是这样的: 我有两个表,即:tbl_讲师,其中包含讲师信息,如讲师ID和姓名;tbl_顾问,其中包含由特定讲师处理的班级的所有记录,如班级的课程、年份和部分。我的桌子是这样的: tbl\U讲师: id | name ----+-------------- 001 | Jhon Doe 002 | Kaitlyn Moore instructor_id | course | year | sectio

我试图尽可能地简化我的问题,我希望我的解释能澄清它的含义

情况是这样的:

我有两个表,即:
tbl_讲师
,其中包含讲师信息,如讲师ID和姓名;
tbl_顾问
,其中包含由特定讲师处理的班级的所有记录,如班级的
课程
年份
部分
。我的桌子是这样的:

tbl\U讲师:

id  | name
----+--------------
001 | Jhon Doe
002 | Kaitlyn Moore  
instructor_id  | course        | year      |  section
---------------+---------------+-----------+-----------
001            | BSINT         | 2nd Year  | A
001            | BSINT         | 2nd Year  | C
001            | BSINT         | 2nd Year  | B
002            | BSBA          | 1st Year  | A
002            | BSBA          | 1st Year  | D
tbl\U咨询:

id  | name
----+--------------
001 | Jhon Doe
002 | Kaitlyn Moore  
instructor_id  | course        | year      |  section
---------------+---------------+-----------+-----------
001            | BSINT         | 2nd Year  | A
001            | BSINT         | 2nd Year  | C
001            | BSINT         | 2nd Year  | B
002            | BSBA          | 1st Year  | A
002            | BSBA          | 1st Year  | D
现在,我正在尝试使用PHP查询中的
internaljoin
选择讲师Id和姓名及其相关的咨询信息:

<?php
$getAdvisory = "SELECT 
  ti.id AS id,
  ti.name AS name,
  ta.course AS ccourse,
  ta.year AS cyear,
  ta.section AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta
ON ti.id = ta.instructor_id";
OpenConn()->query($getAdvisory);

if ($getAdvisory->num_rows > 0) {
    while ($row = $getAdvisory->fetch_assoc()) {
     $id = $row['id'];
     $name = $row['name'];
    }
    ?>
    <td><?php echo $id; ?></td>
    <td><?php echo $name; ?></td>
    <td><button>View Advisory</button></td>
    <?php
 }
}
?>
我的问题是,我希望我的html表按讲师ID区分,但仍然返回每个讲师的所有相关咨询信息,因为我希望在单击每个讲师姓名旁边的
查看咨询
按钮时,以一种模式显示讲师持有的课程,以便在讲师已删除或添加新的建议


我怎样才能做到呢?提前谢谢。

您需要明确的条款

 SELECT DISTINCT 
  ti.id AS id,
  ti.name AS name,
  ta.course AS ccourse,
  ta.year AS cyear,
  ta.section AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id
这样你就应该得到

id   | name          |  action
-----+---------------+-----------
001  | John Doe      | View Advisory
002  | Kaitlyn Moore | View Advisory
如果值位于不同的行上,则可以使用(假)聚合函数

SELECT ti.id AS id,
ti.name AS name,
min(ta.course) AS ccourse,
min(ta.year) AS cyear,
min(ta.section)  AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id
GROUP BY id, name 

PLI检查此查询:

SELECT    ti.*, GROUP_CONCAT( CONCAT( ta.course, ' ' , ta.year,' ', ta.section ) separator ' - ') as ColumnName 
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id 
GROUP BY ti.idid  
输出:

      | name          |  action
 -----+---------------+-----------
 001  | John Doe      | BSINT 2nd Year a - BSINT 2nd Year b - BSINT 2nd Year c
 002  | Kaitlyn Moore | BSBA 1st Year d - BSBA 1st Year a

已尝试
分组依据?
这是父页面,在其中使用分组依据。单击查看咨询通行证讲师id,从
tbl\u咨询
表中获取其相关咨询。@MasivuyeCokile是的,我做了。但它只返回1行咨询信息。请参见上面的@RahulMeshram comment^您能在这里构建测试模式吗?谢谢,但我想将课程、年份和部分分配到PHP变量中,以便在讲师添加或删除咨询时更新数据库。这个查询可以吗?你可以使用
explode(',',$row['ColumnName'])
将列转换为所有咨询的数组。这不会产生输出,因为
课程
年份
部分
在每行都是不同的。正如我在对主要问题的评论中所问的那样,如果没有显示,那么在此查询中从
tbl\u advisory
中选择任何内容有什么意义?