jQu*_*ast 8 mysql sql select datetime 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 ?
??????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我正在尝试解析用户ID 9的总小时数,对于2014年1月和2014年.从表中可以看出,这是第一行和最后一行.
例如,01 01 2014 9
第一行的ID是否代表DD/MM/YYYY/ID.
我希望能够找回所有时间(hours_a,hours_b&hours_c 分开)为USER_ID = 9,其中天= 01 - 31(通过所有天循环?),月= 01和年= 2014.
要以这样的方式导出:
{"userid":"9","month":"01","year":"2014","total_hours_a":"13","total_hours_b":"14","total_hours_c":"33"}
Run Code Online (Sandbox Code Playgroud)
ID代表Day,Month,Year和Userid:
目前我正在选择所有表格:
$query="SELECT * FROM `weird_table` WHERE `id` LIKE 9";
Run Code Online (Sandbox Code Playgroud)
将其打印到编码的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();
Run Code Online (Sandbox Code Playgroud)
然后是客户端(因为我是前端开发人员),我混合并匹配并总结并得到我想要的结果.而不是做所有这些麻烦,并给用户这么多的CPU痛苦; 我希望服务器能够完成工作并打印出我正在寻找的内容.
尝试这个:
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'
Run Code Online (Sandbox Code Playgroud)
或者
SELECT *, (hours_a + hours_b + hours_c) totalHours
FROM weird_table
WHERE user_id = 9 AND SUBSTRING(id, 3, 6) = '012014'
Run Code Online (Sandbox Code Playgroud)
或者
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
Run Code Online (Sandbox Code Playgroud)