假设我想为每个公司创建一个页面,该页面依次列出每个员工及其执行的每项职责。我想要(假日酒店):-
Michelle Hopkins … 值班经理 / 会计 / 前台
Anthony Archer … 夜间门房 / 客房服务
Hannah Newell … 预订/酒吧服务
但以下输出: -
米歇尔霍普金斯……预订/酒吧服务
Anthony Archer … 预订/酒吧服务
Hannah Newell … 预订/酒吧服务
将 'employee_duties' 数组存储在 'employee_person_duties' 数组中以便如上显示的正确语法是什么?
是否可以使用单个 SQL SELECT 语句来做到这一点?
数据库布局
公司
公司 / company_id
假日酒店 / 1
旅宿 / 2
布埃纳维斯塔 / 3
公司人
companyid/personid/职责
1 / 14 / 值班经理
1 / 14 / 会计师
1 / 14 / 前台
1 / 15 / 夜间搬运工
1 / 15 / 客房服务
1 / 16 / 预订
1 / 16 / 酒吧服务
人
person_id / person_name
14 / 米歇尔霍普金斯
15 / 安东尼·阿彻
16 / 汉娜·纽厄尔
PHP
$sql = "SELECT DISTINCT person_id, person_name
FROM companyperson
INNER JOIN person
ON personid = person_id
WHERE companyid = '$company_id' ";
while ($row = mysqli_fetch_array($result))
{
$employee_people[] = array('person_id' => $row['person_id'], 'person_name' => $row['person_name']);
}
foreach($employee_people as $employee_person)
{
$person_id = $employee_person['person_id'];
$sql = "SELECT duty
FROM companyperson
INNER JOIN person
ON personid = person_id
WHERE companyid = '$company_id'
AND person_id = '$person_id' ";
$employee_duties = array();
while ($row = mysqli_fetch_array($result))
{
$employee_duties[] = array('duty' => $row[duty']);
}
$employee_person_duties[] = array($employee_duties, 'person_name' => $employee_person['person_name'], 'person_id' => $employee_ person['person_last_name']);
}
HTML
<?php foreach ($employee_person_duties as $employee_person_duty): ?>
<a href = "/person/<?php htmlout($employee_person_duty ['person_url']); ?>">
<?php htmlout($employee_person_duty ['person_name']); ?></a>
.....
<?php $duties_array = array(); foreach ($employee_duties as $employee_duty)
{
$duties_array[] = htmlspecialchars($employee_duty ['duty'], ENT_QUOTES, 'UTF-8');
}
echo implode(" / ", $duties_array); ?>
<?php endforeach; ?>
编辑
啊,这是一个很好的解决方案,谢谢。但是,它不能让我以连接字符串以外的形式显示该数据,即我可能需要在垂直列表或表格中的单个单元格中显示,等等。
而且我需要添加另一个单独的描述字段(我需要选择不同的格式 - 见下文)所以我认为我最终将不得不找出如何在一个数组中保存一个数组,以便我可以单独控制每个结果元素。任何人都可以帮忙吗?
公司人
companyid/personid/职责/职责描述
1 / 14 / 值班经理 / 接受预订;配备电话;综合管理
米歇尔霍普金斯
值班经理(接受预订;值班电话;综合管理)
会计(收支平衡;公司工资)
前台(接待客人;接受预订)