首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多维数组处理SQL结果

多维数组处理SQL结果
EN

Stack Overflow用户
提问于 2013-07-01 12:59:44
回答 1查看 1.1K关注 0票数 0

假设我想为每一家公司创建一个页面,它将依次列出每个员工以及他们所履行的每一项职责。我要(度假酒店):-

米歇尔霍普金斯…值班经理/会计/前台

安东尼·阿彻…夜间搬运工/客房服务

汉娜·纽韦尔…预订/律师服务

但以下产出如下:

米歇尔霍普金斯…预订/律师服务

安东尼·阿彻…预订/律师服务

汉娜·纽韦尔…预订/律师服务

在“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汉娜·内韦尔

代码语言:javascript
运行
复制
$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']);
}

代码语言:javascript
运行
复制
<?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 /值班经理/预约;配备电话;一般管理

米歇尔·霍普金斯

值班经理(预约;配备电话;一般管理)

会计(平衡帐簿;公司工资)

前台(迎宾;预订)

EN

回答 1

Stack Overflow用户

发布于 2013-07-01 13:09:31

以及是否可以使用单个SELECT语句来实现这一点?是的;假设您使用的是my_SQL,那么第一个查询如下:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17405075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档