Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在一次查询中选择MySQL返回表头和表体_Php_Mysql_Database - Fatal编程技术网

Php 在一次查询中选择MySQL返回表头和表体

Php 在一次查询中选择MySQL返回表头和表体,php,mysql,database,Php,Mysql,Database,你好,我在努力完成这项任务时遇到了困难。问题是,我不确定这必须以哪种方式进行,也找不到关于实现这类任务的教程或信息 问题是我有两个表和一个连接表。在常规查询中,通常显示的是已知值的表头,然后是数据。在我的例子中,我必须水平和垂直显示表格,因为标题值是未知值 这里是DB的示例 Clients: +--------+------ + | ID | client| +--------+------ + | 1 | Sony | | 2 | Dell | +----

你好,我在努力完成这项任务时遇到了困难。问题是,我不确定这必须以哪种方式进行,也找不到关于实现这类任务的教程或信息

问题是我有两个表和一个连接表。在常规查询中,通常显示的是已知值的表头,然后是数据。在我的例子中,我必须水平和垂直显示表格,因为标题值是未知值

这里是DB的示例

Clients: 
+--------+------ +
|     ID | client| 
+--------+------ +
|      1 | Sony  | 
|      2 | Dell  |
+--------+------ +

Users:
+--------+---------+------------+
|     ID | name   | department  |
+--------+--------+-------------+
|      1 | John   |            1|
|      2 | Dave   |            2|
|      3 | Michael|            1|
|      4 | Rich   |            3|
+--------+--------+-------------+

Time:
+--------+------+---------------------+------------+
|     ID | user | clientid | time     | date       |
+--------+------+---------------------+------------+
|      1 | 1    | 1        | 01:00:00 | 2017-01-02 |
|      2 | 2    | 2        | 02:00:00 | 2017-01-02 | 
|      3 | 1    | 2        | 04:00:00 | 2017-02-02 | -> Result Not Selected since date is different
|      4 | 4    | 1        | 02:00:00 | 2017-01-02 |
|      5 | 1    | 1        | 02:00:00 | 2017-01-02 |
+--------+------+---------------------+------------+



Result Table 

+------------+--------+-----------+---------+----------+
|     Client | John   | Michael   | Rich    | Dave     |
+------------+--------+-----------+---------+----------+
|      Sony  |3:00:00 | 0         | 2:00:00 | 0        |
+------------+--------+-----------+---------+----------+
|      Dell  | 0      | 0         |  0      | 2:00:00  |
+------------+--------+-----------+---------+----------+
第一个表客户端包含有关客户端的信息。
第二个表用户包含有关用户的信息
第三个表Time包含每个用户专用于客户端表中不同客户端的时间行

因此,我的目标是生成一个SQL查询,它将显示结果表。换句话说,它将选择每个用户为某个客户端完成的小时数总和。客户端和用户的数量未知。所以首先要做的是选择所有用户,不管他们是否已经完成小时数。之后,必须选择每个客户机以及每个客户机为单个用户实现的小时数总和

问题是我不知道如何处理这种情况。我是否必须首先对所有用户进行一次查询,然后在表头中对他们进行查询,然后实现第二次查询,选择小时数并对正文内容进行查询,或者这可以通过单个查询进行,从而呈现整个表

select命令的过滤器为:

WHERE MONTH(`date`) = '$month'
AND YEAR(`date`) ='$year'
AND u.department = '$department'
为tume SUM选择单行是:

(SELECT SUM( TIME_TO_SEC( `time` ) ) FROM Time tm 
WHERE tm.clientid = c.id AND MONTH(`date`) = '$month' AND YEAR(`date`) ='$year'
这是一个为用户选择时间的查询,根据我的逻辑,这可能会通过c.id
GROUP by c.id
(客户端id)进行转换,问题是它必须包含另一个WHERE子句,该子句将指定未知的用户。如果用户为已知值,例如值为5,则在u.id=1、2、3等的情况下,为每个用户创建5个后续值是没有问题的

因此,这里有两个主要问题:如何在同一个查询中显示users头,以及如何选择与用户对应的每个客户端的小时数总和

查看结果表,希望把事情弄清楚

任何能够解决这种情况的建议或答案都将非常有用


谢谢大家!

第三个表第二列的底行的值应该是
Dave
还是
0
?无论哪种方式,您所寻找的都被称为“透视表”。是的,您是正确的,这是一种部门值为=1,2,3的情况。一个简单的
按用户分组的
,clientid
on time table不就是您想要的数据吗?如何将此数据转换为最终表更多的是一个表示问题,而不是SQL。通常,数据显示问题最好在表示层(例如,一个简单的PHP循环)中解决(如果可用)。否。您只需生成一个有序的数组,然后在应用程序级代码中处理该数组。