PHP,帮助显示相关表的查询结果
我是db的新手,为了实践,我创建了一个名为“Company”的简单数据库,其中包含三个表:employee、department、position。员工表中的字段包括:id、姓名、部门id、职位id和am。使用外键将部门和职位与员工关联 我想显示如下信息: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
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指向一个方向。