Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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表中带有group by where date>date的表中选择_Php_Jquery_Html_Mysql - Fatal编程技术网

Php 从mysql表中带有group by where date>date的表中选择

Php 从mysql表中带有group by where date>date的表中选择,php,jquery,html,mysql,Php,Jquery,Html,Mysql,我需要的是,显示机器id和操作id的唯一组合的第一个完成日期,这将使用group by函数完成,同样,我想显示机器id和操作id的唯一组合的第一个选择完成日期之后的第一个完成日期 到目前为止,我所尝试的是如下所示 $query=SELECT* 从维护条目表 左连接 选择“在日期完成”作为“在日期完成”1,维护条目表* 来自维护\条目\表格$where 按机器id分组,操作id为groupedDate 维护时\u条目\u table.machine\u id=groupedDate.machin

我需要的是,显示机器id和操作id的唯一组合的第一个完成日期,这将使用group by函数完成,同样,我想显示机器id和操作id的唯一组合的第一个选择完成日期之后的第一个完成日期

到目前为止,我所尝试的是如下所示

$query=SELECT* 从维护条目表 左连接 选择“在日期完成”作为“在日期完成”1,维护条目表* 来自维护\条目\表格$where 按机器id分组,操作id为groupedDate 维护时\u条目\u table.machine\u id=groupedDate.machine\u id 和维护\u条目\u table.operation\u id=groupedDate.operation\u id 和维护\u条目\u table.done\u on \u date>groupedDate.done\u on \u date1
按机器标识、操作标识分组” 似乎您需要每辆车和每种服务类型的所有服务日期。由于没有包含表的架构, 我只是用你提到的专栏写了这篇文章。请随意添加任何缺少的列。我还创建了一个 这将生成表并运行下面的查询

日期不是单独的列,而是在一列中,用逗号分隔。显示时,可以轻松分解此列 价值观如果为每个日期创建单独的列,则必须知道最大日期数,并为每个日期构建一个包含联接的查询

SELECT
    a.`car_name`,
    a.`service_name`,
    GROUP_CONCAT(a.`done_date` ORDER BY a.`done_date` ASC) as `Dates_Done`
FROM `maintenance_entry_table` a
LEFT JOIN (
    SELECT 
        c.`car_name`,
        c.`service_name`,
        MIN(`done_date`) as `first_date`
    FROM `maintenance_entry_table` c
    GROUP BY c.`car_name`,c.`service_name`
    ) b
ON b.`first_date` < a.`done_date` AND b.`car_name` = a.`car_name` AND b.`service_name` = a.`service_name`
GROUP BY a.`car_name`,a.`service_name`
ORDER BY a.`car_name`,a.`service_name`;
编辑

这将生成您的示例输出,对于每辆车、服务和日期,它将输出车、服务、日期和下一个服务日期:

问题2:

:

:


选择*。。。group by machine\u id,操作\u id请求无效数据,因为您误用了MySQL的group by功能。。阅读@SumanDey如何为机器标识和操作标识的唯一组合构建一个查询以在日期完成,另一个查询以在日期完成。最后,cars的解释是不言自明的。我的意思是它实际上让人困惑,所以你试图让一个垂直的表相对于完成日期水平,还是每个服务都有两个不合理的完成日期?@MasonStedman,示例数据通常是不合理的。我明天一定会尝试,但我担心mindone_date总是以最短日期开始每一行,而required正好如car示例中所述,其中第一行first done_date和second done_date…………second done_date将成为第二行的first done_date,依此类推……对不起,我猜在左侧连接中不需要group by按照我对每辆车及其相关服务类型的要求选择语句。连接可防止您所说的关于同一辆车+服务的内容在每个日期重复作为第一个完成日期。除非那是你想要的。子查询中的group by是如何获得特定car+服务的最早完成日期。如果您真的希望显示为示例输出,那么使用此结果可以在PHP中轻松完成。请参阅我更新的答案。如果您想在date\u done顺序中显示结果,只需更改order BY子句,并将a.date\u done放在第一位。很抱歉打扰您,如果您能抽出一些时间,请查看下面我正在处理的查询。
|  car_name |   service_name |                       Dates_Done |
|-----------|----------------|----------------------------------|
|    benz_1 |     oil_change | 2017-01-14,2017-05-24            |
| porsche_1 |     oil_change | 2017-01-04,2017-04-15,2017-07-12 |
| porsche_1 | replace_wipers | 2017-01-04                       |
| porsche_1 |     tire_check | 2017-01-04,2017-06-11            |
| porsche_2 |     oil_change | 2017-05-01,2017-08-20            |
SELECT
    a.`car_name`,
    a.`service_name`,
    a.`done_date`,
    coalesce(MIN(b.`done_date`),'') as `next_done_date`
FROM `maintenance_entry_table` a
LEFT JOIN `maintenance_entry_table` b
ON b.`done_date` > a.`done_date` AND 
    b.`car_name` = a.`car_name` AND 
    b.`service_name` = a.`service_name`
GROUP BY a.`car_name`,a.`service_name`,a.`done_date`
ORDER BY a.`car_name`,a.`service_name`,a.`done_date`
|  car_name |   service_name |  done_date | next_done_date |
|-----------|----------------|------------|----------------|
|    benz_1 |     oil_change | 2017-01-14 |     2017-05-24 |
|    benz_1 |     oil_change | 2017-05-24 |                |
| porsche_1 |     oil_change | 2017-01-04 |     2017-04-15 |
| porsche_1 |     oil_change | 2017-04-15 |     2017-07-12 |
| porsche_1 |     oil_change | 2017-07-12 |                |
| porsche_1 | replace_wipers | 2017-01-04 |                |
| porsche_1 |     tire_check | 2017-01-04 |     2017-06-11 |
| porsche_1 |     tire_check | 2017-06-11 |                |
| porsche_2 |     oil_change | 2017-05-01 |     2017-08-20 |
| porsche_2 |     oil_change | 2017-08-20 |                |
| id |  car_name |   service_name |  done_date |
|----|-----------|----------------|------------|
|  1 | porsche_1 |     oil_change | 2017-01-04 |
|  2 | porsche_1 |     oil_change | 2017-04-15 |
|  3 | porsche_1 |     oil_change | 2017-07-12 |
|  4 |    benz_1 |     oil_change | 2017-01-14 |
|  5 |    benz_1 |     oil_change | 2017-05-24 |
|  6 | porsche_1 |     tire_check | 2017-01-04 |
|  7 | porsche_1 |     tire_check | 2017-06-11 |
|  8 | porsche_1 | replace_wipers | 2017-01-04 |
|  9 | porsche_2 |     oil_change | 2017-05-01 |
| 10 | porsche_2 |     oil_change | 2017-08-20 |