0

我正在开发一个需要一系列 SQL 相关输出的 PHP 程序,我希望 SQL 可以完成我的大部分工作。

为了这个问题,我有一个带有这种类型的数据和标题的表格

在此处输入图像描述

注意:ID 用于特定条目,并且是自动递增的
注意:标题部分用于隔离特定项目的数据
注意:对于特定项目,人员可能会重复
注意:日期不会重复,但不一定要组织
注意:对于这个问题的目的假设数据没有很好地组织并且在 SQL 语句中发生排序

当我使用 phpmyadmin sql 数据库时

SELECT * FROM `This_Table` WHERE `Title` = 'Project_1' ORDER BY `Working_Date` ASC, `Worker_Name` ASC 

在此处输入图像描述

这是我想要的正确输出。

问题来了,我想使用接近 array_agg 的东西,但是对制作数组数组(二维数组)感到困惑,但我想做的是在新表上使用 SQL 查询,这样我就可以生成以下数组.

问题:SQL 能否提供一个输出,允许我根据上述数据集拥有以下数组?

#Unique Dates Organized ASC
$Date = array('2020-04-19', '2020-04-20', '2020-04-21', '2020-04-22', '2020-04-23', '2020-05-26', '2020-06-01');

#Names which by default will be unique in their own sub array by date 
#so in short a 2 dimensional array with Date then Persons
$Person = array(array('Joe', 'Mark'), array('Mark'), array('Joe', 'Mark'), array('Joe', 'Mark'), array('Mark'), array('Joe'), array('Joe'))

这听起来像是大量的工作,但如果 SQL 可以准确地给我这种输出,它将使我的一些编码变得更加容易。此时,我必须将 SQL 中的数据行输出到我的 PHP 中,并在 PHP 代码本身中构建数组,而不是让 SQL 输出这样的数组,对于较大的数据库,构建数组本身需要大量时间更不用说要求独特的数据了。

4

1 回答 1

1

请在下面找到代码和解释以生成每个数组。

1.第一个数组非常简单。从数据库中获取不同的记录并加载数组。代码如下,

 <?php
 $link = mysqli_connect("localhost", "my_user", "my_password", "world");

 $query = "select distinct date from projects order by date asc";
 $result = mysqli_query($link, $query);

 /* numeric array */
 $datearray = mysqli_fetch_array($result, MYSQLI_NUM);
 ?>
  1. 第二个是数组数组(而不是动态数组)有点棘手。我将首先分解该方法,Step1。MYSQL group_concat 聚合用于将行转置为列。参考 Db fiddle 链接查看详细信息 - https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5dd9a070c1d9a19bc16a5f4384672cc6

MySQL查询结果集如下,按日期升序分组。姓名乔,马克 乔乔,马克

步骤 2. 在 php 中,读取返回的转置名称记录,并使用“explode”通过拆分逗号分隔的字符串来加载数组。这将对循环中返回的每条记录进行。步骤 3. 将上述数组进一步加载到另一个数组。

 <?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "select names from (select dates,group_concat(person) as 'names' from projects group by dates order by dates asc) tab";
$result = mysqli_query($link, $query);
$namesarray = [];
while($row = mysqli_fetch_assoc($result))
    {
      $namestring = $row['names']
      $arrayofarray = explode(',', $$namestring); 
      $namesarray = array($arrayofarray);
    }
?>

PS : php 代码已针对任何语法错误进行了测试。SQL 查询已在 MySQL 8.0 数据库上成功测试。表名假定为项目。

请参考 DBfiddle 链接查看 SQL 查询https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=85f2f88b2ec25ce1d8479a5f5df4d9bb

于 2020-04-24T21:43:48.027 回答