0

假设我想为每个公司创建一个页面,该页面依次列出每个员工及其执行的每项职责。我想要(假日酒店):-

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 / 值班经理 / 接受预订;配备电话;综合管理


米歇尔霍普金斯

值班经理(接受预订;值班电话;综合管理

会计(收支平衡;公司工资

前台(接待客人;接受预订

4

1 回答 1

0

是否可以使用单个 SQL 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 已经具有按用户分组的行,并带有 / 分隔职责。

组连接语法:http ://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

于 2013-07-01T13:09:31.280 回答