在一个查询

时间:2017-01-13 15:24:04

标签: php mysql database

您好我正在努力实现这项任务。问题是我不确定必须以哪种方式进行,无法找到有关实现此类任务的教程或信息。

问题是我在他们两个之间有两个表和一个连接表。对于常规查询,通常显示的是表头,它是已知值,然后是数据。在我的情况下,我必须水平和垂直显示表,因为标题值是未知值。

以下是数据库

的示例
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  |
+------------+--------+-----------+---------+----------+

第一个表客户端包含有关客户端的信息 第二个表用户包含有关用户的信息 第三表时间包含来自clients表的专用于不同客户端的每个用户的时间行。

所以我的目标是创建一个显示Result表的SQL Query。换句话说,它将选择每个用户为某个客户完成的小时数。客户端和用户数量未知。因此,首先必须做的是选择所有用户,无论他们是否完成了数小时。之后必须选择每个客户端以及为每个用户实现的每个客户端的小时数。

问题是我不知道如何处理这种情况。我是否首先进行一个查询,选择所有用户,然后在表头中预先处理它们,然后实现第二个查询选择小时并预先取消身体内容,或者这可以使用单个查询来生成整个表格。

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'

这是为用户选择时间的查询,这里我的逻辑可能会使用GROUP BY c.id(客户端ID)进行转换,问题是它必须包含另一个WHERE子句,它将指定USER未知。如果用户已知值为例如5,那么对于每个用户WHERE u.id = 1,2,3等没有问题。[/ p>

以下是如何在同一查询中显示的两个主要问题用户标题和它们选择与用户对应的每个客户端的小时数。

查看结果表希望明确的事情。

任何可以解决这种情况的建议或答案都会非常有帮助。

谢谢!

0 个答案:

没有答案