Php 在一次查询中选择MySQL返回表头和表体
你好,我在努力完成这项任务时遇到了困难。问题是,我不确定这必须以哪种方式进行,也找不到关于实现这类任务的教程或信息 问题是我有两个表和一个连接表。在常规查询中,通常显示的是已知值的表头,然后是数据。在我的例子中,我必须水平和垂直显示表格,因为标题值是未知值 这里是DB的示例Php 在一次查询中选择MySQL返回表头和表体,php,mysql,database,Php,Mysql,Database,你好,我在努力完成这项任务时遇到了困难。问题是,我不确定这必须以哪种方式进行,也找不到关于实现这类任务的教程或信息 问题是我有两个表和一个连接表。在常规查询中,通常显示的是已知值的表头,然后是数据。在我的例子中,我必须水平和垂直显示表格,因为标题值是未知值 这里是DB的示例 Clients: +--------+------ + | ID | client| +--------+------ + | 1 | Sony | | 2 | Dell | +----
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.idGROUP by c.id
(客户端id)进行转换,问题是它必须包含另一个WHERE子句,该子句将指定未知的用户。如果用户为已知值,例如值为5,则在u.id=1、2、3等的情况下,为每个用户创建5个后续值是没有问题的
因此,这里有两个主要问题:如何在同一个查询中显示users头,以及如何选择与用户对应的每个客户端的小时数总和
查看结果表,希望把事情弄清楚
任何能够解决这种情况的建议或答案都将非常有用
谢谢大家! 第三个表第二列的底行的值应该是
Dave
还是0
?无论哪种方式,您所寻找的都被称为“透视表”。是的,您是正确的,这是一种部门值为=1,2,3的情况。一个简单的按用户分组的和,clientid
on time table不就是您想要的数据吗?如何将此数据转换为最终表更多的是一个表示问题,而不是SQL。通常,数据显示问题最好在表示层(例如,一个简单的PHP循环)中解决(如果可用)。否。您只需生成一个有序的数组,然后在应用程序级代码中处理该数组。