在网站上存储列排序顺序的最佳方式是什么


What is the best way to store a column sort order on website?

下面是我的表的样子:http://jsfiddle.net/Draven/kGtx7/14/

每个标题单元格都可以单击,以便能够按该字段和ASC/DESC进行排序。我希望能够将排序选项存储在某个地方,这样它就会被记住,但不确定最好的方法。

以下是我在想的选项。。。

  1. users表中生成sort_fieldsort_order字段
  2. 制作一个具有useridsort_fieldsort_order字段的新表
  3. 或者饼干,但我认为这是最糟糕的选择

我认为我们不清楚你想要什么,但我认为你想要这样的东西:

步骤1:运行一个查询,将排序值填充到2个会话变量中。步骤2:执行类似于此代码的操作。

$sortHeadClicked = $_SESSION['headClicked']
$sortReturnDirection = $_SESSION['returnDirection']
//TODO: validate data before query
if ($result = $mysqli->query("SELECT * FROM table ORDER BY $sortHeadClicked $sortReturnDirection)) 
{
    //TODO: Get results
}

第三步:像你的一样微笑

或者,您可以使用某种子选择查询。

注意:这是一个简单化的逻辑,所以在这个例子中它们不会被记住。然而,如果你只想暂时记住它们,你可以将get放入会话变量中

但是,如果您想永久记住这些,您需要在用户表中有两列,您可以将它们放入会话中,也可以使用子选择查询

这由解释决定,但每种情况都有自己的用途。

1) 在users表中添加两个字段将使检索这些值的调用更容易,但这是一种比..更难解决的方法。。

2) 建立关系数据库就是为了这样使用。我不确定性能,但我知道使用关系数据库的功能可以使数据库更容易导航和理解/操作。虽然你可能需要一些更复杂的调用(即加入之类的),但我相信这种权衡是值得的

和3)饼干是一个非常好的解决方案。它们可以在临时情况下使用,但如果你试图保存信息以备日后使用,cookie很容易被删除甚至不启用,此时你的网站可能会受到严重影响。

实际上,使用cookie来存储用户会话id,然后将会话数据保存在数据库、平面文件或memcached中是解决此问题的常见方法。这将有助于为此设置一个可重复使用的机制,比如排序注册表,您可以随意检索每个用户的值。当然,这只适用于有用户登录的情况。否则,存储这些数据就没有意义,因为一旦用户结束会话(关闭浏览器窗口),他们的身份就会丢失。大多数网络应用程序都会使用cookie来识别您的身份。如果你删除了那个cookie,它就会忘记你,你就会注销。

如果您想添加另一个每个用户的"首选项",因为您需要修改底层表,那么您的第一个解决方案将受到影响。

如果您正在使用PHP,请查看ZendSession以获取想法。如果没有,这些概念仍然适用。

要将排序顺序保存到他们的配置文件中,请将表放入表单中,并使可排序的字段名为input s。当他们单击其中一个字段名(例如按位置排序)时,让表单的action运行PHP snip,更新数据库中他们配置文件中的字段。

或者,如果能够使用ajax,您可以简单地将数据库更新添加到ajax调用中,然后跳过表单。

恐怕这取决于您的需求。我如何看待这个问题:

  1. 如果您必须在
    中的浏览器、PC之间共享此设置,那就太好了如果用户在浏览器中删除cookie。但它并不灵活——如果您将需要添加另一个表,还将添加另外两个表字段
  2. 就计算机、浏览器等之间的共享方式而言,与1相同,但它更灵活。您可以很容易地添加具有表名的列
  3. 如果此设置不那么重要,并且在某些情况下您可能允许放松设置。这个解决方案最简单,但可能不适合您