【发布时间】:2014-05-02 23:01:45
【问题描述】:
因此,我对这个特定主题进行了大量研究,但我仍然对最佳方法感到有些困惑。我的问题分为两部分。
1.) 基本上,我的页面正在访问一个 MySQL 音乐数据库,该数据库包含特定艺术家的整个唱片。从字面上看,有1000多种物品。该页面的功能是显示所有项目并按数组中的特定值(用户从预定义列表中选择)对它们进行排序,例如标题、发布日期、目录号、类别等。
据我了解,有两种方法可以实现显示和排序。一旦用户加载页面,PHP 可以立即输出唱片数组,将其回显到 javascript 对象中,然后在用户单击按钮后使用 javascript 进行排序。
或
用户点击按钮后,我可以使用 AJAX 发送用户希望所有项目排序的值,使用 PHP ** 或数据库服务器排序,如 ORDER BY ** 进行排序并输出数组JSON。例如,按页面名称排序的数组看起来像这样:
var discography = [
{"id":"1",
"pagename":"item100001",
"category":"Albums",
"Label":"Atlantic",
"title":"Awesome Album",
"date":"July 2, 1998",
"country":"United States",
"catalog":"666 3333 44444",
"format":"CD"},
{"id":"12",
"pagename":"item100002",
"category":"Albums",
"Label":"Epic",
"title":"Fun Music",
"date":"January 22, 1992",
"country":"United Kingdom",
"catalog":"333 4444 5555",
"format":"Cassette"},
{"id":"3",
"pagename":"item100003",
"category":"Single",
"Label":"Atlantic",
"title":"Cool Single",
"date":"October 12, 1988",
"country":"United States",
"catalog":"444 5555 66666",
"format":"CD"}
];
然后我可以通过 jquery 操作以输出为 html 并在页面上显示项目。
用户应该能够按他们想要的任何值对项目进行排序和重新排序,而不仅仅是一次。
也许这个问题过于简单化了前提,但哪种数组排序方法更智能、更快、更有效?服务器端排序(使用 AJAX 并以 JSON 格式输出)还是 Javascript?如果是服务器端,我相信我知道如何编写函数来正确排序数据。
但如果答案是 Javascript,那就引出我的第二个问题。
2.) 我有found plenty of wonderful javascript sorting functions,但我一直在阅读有关 Javascript 中“稳定”与不稳定排序的问题。这个问题甚至适用吗?我绝对需要在所有浏览器中保持一致。 Merge Sort is apparently a wonderful answer to this quandry,但由于我需要按特定字段(类别、日期等)进行排序,因此我需要一些关于如何使函数适应我的目的的指导。但是,如果我可以在不使用归并排序的情况下进行安全、一致的排序,那么我就这样做了。
如果您读到这里,我将不胜感激。欢迎任何帮助!
【问题讨论】:
-
为什么不在数据库服务器中对列表进行排序?
-
您可能需要实际测试一下。在客户端进行排序消除了到服务器的往返行程和数据传输。在服务器上进行排序,特别是在数据库进行排序的情况下,排序可能更快,但需要往返和数据传输。哪个更好取决于要分类和传输的数据量、互联网连接的速度以及您对用户数据上限的关注程度。
-
排序稳定性问题不是问题。无论如何,您将需要编写自己的比较器,因此只需给它一些逻辑即可知道如何打破平局。如果专辑名称相同,则使用数据库 ID 或日期等。
-
@seaofinformation 视情况而定。如果您在客户端上对查询和视图进行分页,那么您基本上必须在数据库服务器中进行排序,因为它是唯一知道所有行的东西。如果您的列表非常短且始终完整显示,那么您可以在客户端安全地进行排序。
-
单个页面上的 5000 个项目非常难以管理,您可能希望将其减少到每页最多 50 个,并为用户提供额外的过滤器来缩小范围。
标签: javascript php ajax arrays sorting