假设我想为每一家公司创建一个页面,它将依次列出每个员工以及他们所履行的每一项职责。我要(度假酒店):-
米歇尔霍普金斯…值班经理/会计/前台
安东尼·阿彻…夜间搬运工/客房服务
汉娜·纽韦尔…预订/律师服务
但以下产出如下:
米歇尔霍普金斯…预订/律师服务
安东尼·阿彻…预订/律师服务
汉娜·纽韦尔…预订/律师服务
在“employee_duties”数组中存储“employee_person_duties”数组的正确语法是什么,以便能够如上显示?
是否可以使用单个SELECT语句执行此操作?
数据库布局
公司
公司/ company_id
假日酒店/1
Travelodge /2
Buena Vista /3
COMPANYPERSON
公司/人员/职责
1/ 14 /值班经理
1/ 14 /会计
1/ 14 /前台
1/ 15 /夜间搬运工
1/ 15 /客房服务
1/ 16保留
1/ 16 /律师服务
PERSON
person_id / person_name
14米歇尔·霍普金斯
15 Anthony Archer
16汉娜·内韦尔
$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']);
}<?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; ?>编辑
啊,这是个很好的解决办法,谢谢。但是,它不能使我以连接字符串以外的形式显示数据,例如,我可能需要在垂直列表中或表中的单个单元格中显示,等等。
我还需要添加另一个单独的description字段(我需要选择不同的格式--参见下面),所以我认为我最终需要了解如何在数组中保存数组,这样我就可以对每个结果元素进行单独的控制。有人能帮忙吗?
COMPANYPERSON
公司/人员/职责/职责描述
1/ 14 /值班经理/预约;配备电话;一般管理
米歇尔·霍普金斯
值班经理(预约;配备电话;一般管理)
会计(平衡帐簿;公司工资)
前台(迎宾;预订)
发布于 2013-07-01 13:09:31
以及是否可以使用单个SELECT语句来实现这一点?是的;假设您使用的是my_SQL,那么第一个查询如下:
SELECT person_id, person_name, Group_concat(duty SEPARATOR '/') as duty
FROM companyperson
INNER JOIN person
ON personid = person_id
WHERE companyid = '$company_id'
GROUP BY Person_Id, Person_Name返回的SQL将已经有按用户分组的行,其中包含/分离任务。
组CONCAT语法:group-concat
https://stackoverflow.com/questions/17405075
复制相似问题