我们跟踪在一个单一的数据库项目的进展。 在过去的两年中,管理的要求已经改变了我们保存日期的格式(最初,只是一年,那么一年一个月,现在满日期)。 为了确保没有从数据库投诉,以前的管理员设置为存储在日期表varchar
,而不是date
。 我创建了一个网络接口,为用户访问并生成报告,但网页是静态的(用户端)。 管理层希望能够通过点击表头排序。 这很容易。 我的问题是这些日期! 由于格式的,他们不排序正确。
这里的日期从PHP中出现三种形式: %Y
, %Y%m
,和%c/%e/%Y
。
我用的tablesorter排序表,但我无法弄清楚如何通过jQuery的日期进行排序。 该inital排序在MySQL查询全部操作:
ORDER BY
CASE WHEN cstatus = 'Complete' THEN 1 ELSE 0 END DESC,
CASE WHEN CHAR_LENGTH(cdevelopmentStart) > 6 THEN
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%m/%d/%Y'), '%c/%e/%2014')
ELSE
CASE WHEN CHAR_LENGTH(cdevelopmentStart) > 4 THEN
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%Y%m'), '%c/%e/%Y')
ELSE
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%Y'), '%c/%e/%Y')
END
END DESC,
id DESC
我需要复制的排序在jQuery的排序的日期列。
但愿,我会后,晚上休息更多的运气,但我想如果有人张贴这件事可以给我一个领先地位。 ^^
解:
我修改了查询,而不是由条件初步排序,离开它默认的排序和创建附加列填充data-text
属性,通过Mottie的建议。
SELECT
CASE WHEN cdevelopmentStart IS NULL THEN
'01/01/2012'
ELSE
CASE WHEN CHAR_LENGTH(cdevelopmentStart) > 6 THEN
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%m/%d/%Y'), '%m/%d/%Y')
ELSE
CASE WHEN CHAR_LENGTH(cdevelopmentStart) > 4 THEN
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%Y%m'), '%m/01/%Y')
ELSE
DATE_FORMAT(STR_TO_DATE(cdevelopmentStart, '%Y'), '01/01/%Y')
END
END
END AS developmentSort,
CASE WHEN courses.cstatus = 'Complete' THEN
0
ELSE
CASE WHEN courses.cstatus = 'Cancelled' THEN
1
ELSE
CASE WHEN courses.cstatus = 'Hold' THEN
2
ELSE
CASE WHEN courses.cstatus = 'Review' THEN
3
ELSE
CASE WHEN courses.cstatus = 'Rework' THEN
4
ELSE
CASE WHEN courses.cstatus = 'Open' THEN
5
ELSE
6
END
END
END
END
END
END AS statusSort
然后,我添加data-text="' . $result['developmentSort'] . '"
和data-text="' . $result['statusSort'] . '"
的PHP-生成的表的相应的列。 最后,我建立的默认排序,并指示其从拉data-text
属性,如果设置,通过将以下的<HEAD>
$("#mainlist").tablesorter({
textAttribute: 'data-text',
usNumberFormat: true,
sortList: [[19, 0], [6, 1], [0, 1]]
});
谢谢你,Mottie,快速回复和解决方案。 :)