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

时间:2012-08-22 00:20:16

标签: php sql sorting pdo

以下是我的表格:http://jsfiddle.net/Draven/kGtx7/14/

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

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

  1. sort_field
  2. 中制作sort_orderusers个字段
  3. 制作一张包含userid以及sort_fieldsort_order字段的新表格
  4. 或Cookies,但我认为这是最糟糕的选择

5 个答案:

答案 0 :(得分:1)

这取决于解释,但每个案例都有自己的用途。

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

.. 2)构建关系数据库以便这样使用。我不确定性能,但我知道使用关系数据库的强大功能可以使您的数据库更容易导航和理解/操作。虽然你可能需要一些更复杂的调用(即连接和诸如此类的东西),但我相信这种权衡是值得的。

和3)Cookie是一种非常好的解决方案。它们可以在临时情况下使用,但如果您要稍后保存信息,可以轻松删除或甚至不启用Cookie,此时您的网站可能会遭受严重损失。

答案 1 :(得分:1)

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

步骤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
}

第3步:像你真棒一样微笑

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

注意:这是简单的逻辑,所以不会记住这个例子。但是,如果您只想暂时记住它们,则可以将获取放入会话变量

但是,如果您希望永久记住这些内容,则需要在用户表中使用两列,您可以将这些列放入会话或使用子选择查询

答案 2 :(得分:0)

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

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

如果您使用的是PHP,请查看Zend Session的想法。如果不是,这些概念仍然适用。

答案 3 :(得分:0)

我担心这取决于你的需求。我怎么看这个问题:

  1. 如果您必须在浏览器,PC之间共享此设置,那就很好了 如果用户在浏览器中删除cookie。但它不灵活 - 如果 你需要添加另一个表,你还需要添加两个表 字段
  2. 与计算机,浏览器等之间的共享方式相同,但它更灵活。您可以轻松添加包含表名的列。
  3. 如果此设置不是那么重要,您可能会在某些情况下允许松动设置。这个解决方案最简单,但它可能不适合你

答案 4 :(得分:0)

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

或者,如果能够使用ajax,您只需将数据库更新添加到ajax调用并跳过表单。