PHP:解析来自mysql的所有数据,其中id为第3和第4位

时间:2014-01-03 12:49:53

标签: mysql sql datetime select substring

我有一个mysql表,其中包含一些奇怪的ID:

╔═══╦════════════╦═════════════╦═══════════╦═════════════╦═══════════╗
║   ║     id     ║   user_id   ║  hours_a  ║   hours_b   ║  hours_c  ║
╠═══╬════════════╬═════════════╬═══════════╬═════════════╬═══════════╣
║ 1 ║ 010120149  ║     9       ║    10     ║     6       ║    23     ║
║ 2 ║ 0212201310 ║     10      ║    2      ║     8       ║    10     ║
║ 3 ║ 021220138  ║     8       ║    1      ║     4       ║     9     ║
║ 4 ║ 020120149  ║     9       ║    3      ║     8       ║    10     ║
╚═══╩════════════╩═════════════╩═══════════╩═════════════╩═══════════╝

我正在尝试解析2014年1月和1月用户ID 9的总小时数。正如您从表中看到的那样,这是第一行和最后一行。

例如,01 01 2014 9是第一行的ID,代表 DD / MM / YYYY / ID

我希望能够为 user_id = 9 检索所有小时(小时数,小时数b和小时数 day = 01 - 31 (遍历所有日期?),月= 01 年= 2014

要以这样的方式导出:

{"userid":"9","month":"01","year":"2014","total_hours_a":"13","total_hours_b":"14","total_hours_c":"33"}

ID代表Day,Month,Year和Userid: enter image description here


目前我在做什么

目前我正在选择所有表格:

$query="SELECT * FROM `weird_table` WHERE `id` LIKE 9";

将其打印到已编码的json:

$result = mysql_query($query);
$temp = 0;
$json = array();

while ($row = mysql_fetch_array($result))
    {
    $json[$temp]['id'] = $row['id'];
    $json[$temp]['userid'] = $row['userid'];
    $json[$temp]['hours_a'] = $row['hours_a'];
    $json[$temp]['hours_b'] = $row['hours_b'];
    $json[$temp]['hours_c'] = $row['hours_c'];
    }

$temp++;
}

print json_encode($json);
mysql_close();

然后是客户端(因为我是前端开发人员),i mix& match&总结并得到我想要的结果。而不是做所有这些麻烦,并给用户这么多的CPU痛苦;我希望服务器能够完成工作并打印出我正在寻找的内容。

3 个答案:

答案 0 :(得分:4)

试试这个:

SELECT *, (hours_a + hours_b + hours_c) totalHours
FROM weird_table 
WHERE user_id = 9 AND 
      STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y') BETWEEN '2014-01-01' AND '2014-01-31'

SELECT *, (hours_a + hours_b + hours_c) totalHours 
FROM weird_table 
WHERE user_id = 9 AND SUBSTRING(id, 3, 6) = '012014'

SELECT *, (hours_a + hours_b + hours_c) totalHours
FROM weird_table 
WHERE user_id = 9 AND 
      YEAR(STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y')) = 2014 AND 
      MONTH(STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y')) = 1

答案 1 :(得分:0)

你可以试试这个

select userid,SUBSTRING(id, 3, 2) ,SUBSTRING(id, 5, 4),hours_a,hours_b, hours_c
FROM weird_table 
WHERE userid = 9 AND SUBSTRING('010120149', 3, 6) = '012014';

可以简单地添加检索到的行小时值。

答案 2 :(得分:-1)

通过使用服务器的CPU,对我来说,PHP也在服务器上运行,所以我会通过PHP脚本来完成工作。

首先将ID拆分为MM,DD,YYYY,然后用它来填充Sum-Array。