构造一维和二维数组的 SQL 输出

Structuring SQL Output for single and 2 dimensional array

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

为了这个问题,我有一个 table 结构和 headers

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

中出现排序

当我使用phpmyadmin时sql数据库

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

这是我想要的正确输出。

问题来了,我想使用接近 array_agg 的东西,但是在制作数组的数组(二维数组)时存在混淆,但我想做的是使用 SQL查询新的 table 这样我就可以生成以下数组。

问题: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 像这样输出数组对于较大的数据库,构建数组本身需要花费大量时间,更不用说调用唯一数据了。

请在下面找到生成每个数组的代码和说明。

1.The 第一个数组非常直 forward.Fetch 来自数据库的不同记录并加载 array.The 代码如下,

 <?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. 第二个是数组的数组(而不是动态数组)有点棘手。我将首先分解方法, 步骤1。 MYSQLgroup_concat聚合用于转置行column.Referdbfiddlelink查看详情-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 代码已针对任何语法进行测试 error.SQL 查询已在 MySQL 8.0 Database.The table 名称上成功测试假定为项目。

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