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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
Jquery 复杂表排序_Jquery_Tablesorter_Date Sorting - Fatal编程技术网

Jquery 复杂表排序

Jquery 复杂表排序,jquery,tablesorter,date-sorting,Jquery,Tablesorter,Date Sorting,我们在单个数据库中跟踪项目进度。在过去两年中,管理层的要求已经改变了我们存储日期的格式(最初,只是年,然后是年-月,现在是完整日期)。为了确保数据库没有投诉,前任管理员将表设置为将日期存储在varchar中,而不是date。我已经为用户创建了一个web界面来访问和生成报告,但该网页是静态的(用户端)。管理层希望能够通过单击表标题进行排序。那很容易。我的问题是那些日期!由于格式的原因,它们不能正确排序 以下是从PHP中可以显示日期的三种形式:%Y、%Y%m和%c/%e/%Y 我正在使用对表进行排序

我们在单个数据库中跟踪项目进度。在过去两年中,管理层的要求已经改变了我们存储日期的格式(最初,只是年,然后是年-月,现在是完整日期)。为了确保数据库没有投诉,前任管理员将表设置为将日期存储在
varchar
中,而不是
date
。我已经为用户创建了一个web界面来访问和生成报告,但该网页是静态的(用户端)。管理层希望能够通过单击表标题进行排序。那很容易。我的问题是那些日期!由于格式的原因,它们不能正确排序

以下是从PHP中可以显示日期的三种形式:
%Y
%Y%m
%c/%e/%Y

我正在使用对表进行排序,但我不知道如何通过jQuery对日期进行排序。初始排序完全在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排序中复制日期列的排序

希望在休息了一晚之后我会有更多的运气,但我想把这篇文章贴出来,以防有人能给我一个开头^^

解决方案:

我将查询修改为,而不是最初按条件排序,将其保留为默认排序,并创建附加列来填充
数据文本
属性,如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生成表的相应列中。最后,我设置了默认排序,并指示它从
数据文本
属性(如果设置)中提取,方法是将以下内容添加到


莫蒂,谢谢你的快速回复和解决方案。:)

一旦你把日期拉进来,我会把它们都做成同样的格式。因此,将“2014”定为“2014年1月1日”。如果日期为“2014/6”,则改为“2014年6月1日”。你应该能够对它们进行排序,因为它们都是相同格式的日期。

一旦你输入了日期,我会使它们都是相同格式的。因此,将“2014”定为“2014年1月1日”。如果日期为“2014/6”,则改为“2014年6月1日”。您应该能够对它们进行排序,因为它们都是相同格式的日期。

最简单的解决方案可能是为每个包含“正确”格式的日期字符串的表格单元格添加一个数据属性

<td data-text="1/1/2015">2015 01</td>
如果必须使用原始的tablesorter,则可以将此代码与相同的HTML()一起使用:


也许最简单的解决方案是为每个包含“正确”格式的日期字符串的表单元格添加一个数据属性

<td data-text="1/1/2015">2015 01</td>
如果必须使用原始的tablesorter,则可以将此代码与相同的HTML()一起使用:


这就是我想做的,但是楼上的人说他们想把所有的东西都列出来,就像当初输入的一样。所以,我必须让它在脚本中工作,而不仅仅是MySQL。我可以在早上更好地查看tablesorter,希望到时它能为我提供帮助。^^ ^'这就是我想做的,但是楼上的人说他们想把所有的东西都列出来,就像当初输入的一样。所以,我必须让它在脚本中工作,而不仅仅是MySQL。我可以在早上更好地查看tablesorter,希望到时它能为我提供帮助。^^ ^'天才。我不得不修改查询以创建专门包含格式化信息的附加列,但效果很好。:)天才。我不得不修改查询以创建专门包含格式化信息的附加列,但效果很好。:)
$(function () {
    $('table').tablesorter({
        theme: 'blue',
        // data-attribute that contains alternate cell text
        textAttribute: 'data-text',
        // false for German "1.234.567,89" or French "1 234 567,89"
        usNumberFormat: true
    });
});
$(function () {
    $('table').tablesorter({
        // set to "us", "pt", "uk", "dd/mm/yy"
        dateFormat: "us",
        // custom table cell text extraction method
        textExtraction: function (node) {
            var $node = $(node);
            return $node.attr('data-text') || $node.html();
        }
    });
});