PHP,帮助显示相关表的查询结果

PHP,帮助显示相关表的查询结果,php,mysql,Php,Mysql,我是db的新手,为了实践,我创建了一个名为“Company”的简单数据库,其中包含三个表:employee、department、position。员工表中的字段包括:id、姓名、部门id、职位id和am。使用外键将部门和职位与员工关联 我想显示如下信息: Department 1 Directors: Kevin, Jane, Tom Managers: Joe, Fred, Mary Deparment 2 Directors: Bill, Elizabeth, Frank Manager

我是db的新手,为了实践,我创建了一个名为“Company”的简单数据库,其中包含三个表:employee、department、position。员工表中的字段包括:id、姓名、部门id、职位id和am。使用外键将部门和职位与员工关联

我想显示如下信息:

Department 1
Directors: Kevin, Jane, Tom
Managers: Joe, Fred, Mary

Deparment 2
Directors: Bill, Elizabeth, Frank
Managers: Jennifer, Brian, Nicole
我使用JOIN语句返回所有员工及其相关职位和部门,但我无法找到正确的PHP来显示他们,如上面的示例所示。我应该没有使用连接吗

SQL:

任何帮助都会很好


谢谢

首先:根据需要调整SQL以进行排序

    $sql = "SELECT employee.name, position.pos_name, department.dept_name 
            FROM employee
            INNER JOIN position
            ON employee.pos_id = position.id
            INNER JOIN department
            ON employee.dept_id = department.id
            ORDER BY dept_name,pos_name";

    $result = $dbconn->query($sql);
现在执行双组更改循环:

$dname=false;

while (true) {
  $row=mysql_fetch_row($result);

  //done!
  if (!$row) break;

  if (!($row[2]===$dname)) {
    //Group change #1: We have a new department
    $dname=$row[2];
    echo "<br>\nDepartment: $dname";
    $pname=false;
  }

  if (!($row[1]===$pname)) {
    //Group change #2: We have a new Position
    $pname=$row[1];
    echo "<br>\n$dname: ";
    $separator='';
  }

  echo $separator.$row[0];
  $separator=', ';
}
$dname=false;
while(true){
$row=mysql\u fetch\u row($result);
//完成了!
如果(!$行)中断;
如果(!($row[2]=$dname)){
//小组变动1:我们有了一个新部门
$dname=$row[2];
echo“
\n部门:$dname”; $pname=false; } 如果(!($row[1]=$pname)){ //小组变动2:我们有了一个新职位 $pname=$row[1]; echo“
\n$dname:”; $separator=''; } echo$分隔符。$行[0]; $separator=','; }
首先:根据需要调整SQL以进行排序

    $sql = "SELECT employee.name, position.pos_name, department.dept_name 
            FROM employee
            INNER JOIN position
            ON employee.pos_id = position.id
            INNER JOIN department
            ON employee.dept_id = department.id
            ORDER BY dept_name,pos_name";

    $result = $dbconn->query($sql);
现在执行双组更改循环:

$dname=false;

while (true) {
  $row=mysql_fetch_row($result);

  //done!
  if (!$row) break;

  if (!($row[2]===$dname)) {
    //Group change #1: We have a new department
    $dname=$row[2];
    echo "<br>\nDepartment: $dname";
    $pname=false;
  }

  if (!($row[1]===$pname)) {
    //Group change #2: We have a new Position
    $pname=$row[1];
    echo "<br>\n$dname: ";
    $separator='';
  }

  echo $separator.$row[0];
  $separator=', ';
}
$dname=false;
while(true){
$row=mysql\u fetch\u row($result);
//完成了!
如果(!$行)中断;
如果(!($row[2]=$dname)){
//小组变动1:我们有了一个新部门
$dname=$row[2];
echo“
\n部门:$dname”; $pname=false; } 如果(!($row[1]=$pname)){ //小组变动2:我们有了一个新职位 $pname=$row[1]; echo“
\n$dname:”; $separator=''; } echo$分隔符。$行[0]; $separator=','; }
什么是$result?是db资源,还是query()方法返回数组

假设$result是query()方法返回的关联数组,您应该能够遍历它并使用条件来获取所需的信息

foreach($result as $row)
{
    switch($row['department.dept_name']) {
        case "department 1"
           if($row['position.pos_name']) == 'Director') {
               $department1['directors'][] = $row['employee.name'];
           } else if($row['position.pos_name'] == 'Manager') {
               $department1['managers'][] = $row['employee.name'];
           }
        break;

        case "department 2"
          //repeat for each department

    }
}
这将为每个部门提供一个关联数组,然后您可以迭代这些数组并以您描述的格式回显HTML

如果$result是DB资源而不是数组,则需要执行以下操作:

while($row = mysql_fetch_assoc($result))
{
    $data[] = $row;
}

然后在foreach语句中使用$data而不是$result。

什么是$result?是db资源,还是query()方法返回数组

假设$result是query()方法返回的关联数组,您应该能够遍历它并使用条件来获取所需的信息

foreach($result as $row)
{
    switch($row['department.dept_name']) {
        case "department 1"
           if($row['position.pos_name']) == 'Director') {
               $department1['directors'][] = $row['employee.name'];
           } else if($row['position.pos_name'] == 'Manager') {
               $department1['managers'][] = $row['employee.name'];
           }
        break;

        case "department 2"
          //repeat for each department

    }
}
这将为每个部门提供一个关联数组,然后您可以迭代这些数组并以您描述的格式回显HTML

如果$result是DB资源而不是数组,则需要执行以下操作:

while($row = mysql_fetch_assoc($result))
{
    $data[] = $row;
}

然后在foreach语句中使用$data而不是$result。

我无法测试它,我也不太确定该条件是在JOIN中还是在HAVING after中,但请尝试测试:

    $sql = "
            SELECT department.dept_name,department.id,
            GROUP_CONCAT(DISTINCT directors.name SEPARATOR ', '),
            GROUP_CONCAT(DISTINCT managers.name SEPARATOR ', ')
            FROM department
                JOIN employee AS directors
                    ON directors.pos_id = x //director position
                    AND directors.dept_id = department.id
                JOIN employee AS managers 
                    ON managers.pos_id = x //managers position
                    AND managers.dept_id = department.id
            GROUP BY department.id"
$result = $dbconn->query($sql);
print_r($result->fetchAll());

编辑:很抱歉,我的请求(非常)错误,现在应该可以了

我无法测试它,我也不太确定该条件是在加入还是在拥有之后,但请尝试测试:

    $sql = "
            SELECT department.dept_name,department.id,
            GROUP_CONCAT(DISTINCT directors.name SEPARATOR ', '),
            GROUP_CONCAT(DISTINCT managers.name SEPARATOR ', ')
            FROM department
                JOIN employee AS directors
                    ON directors.pos_id = x //director position
                    AND directors.dept_id = department.id
                JOIN employee AS managers 
                    ON managers.pos_id = x //managers position
                    AND managers.dept_id = department.id
            GROUP BY department.id"
$result = $dbconn->query($sql);
print_r($result->fetchAll());

编辑:抱歉,我的请求(非常)错误,现在应该可以了

它没有创建所需的输出,但将kdub指向一个方向。它没有创建所需的输出,但将kdub指向一个方向。