Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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
Php 在网站上存储列排序顺序的最佳方式是什么?_Php_Sql_Sorting_Pdo - Fatal编程技术网

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

Php 在网站上存储列排序顺序的最佳方式是什么?,php,sql,sorting,pdo,Php,Sql,Sorting,Pdo,我的桌子是这样的: 每个标题单元格都可以单击,以便能够按该字段和ASC/DESC进行排序。 我希望能够将排序选项存储在某个地方,以便记住它,但不确定最好的方法 以下是我在想的选择 在用户表中生成排序字段和排序顺序字段 创建一个新表,该表包含其用户标识以及排序字段,以及排序顺序字段 或者饼干,但我认为这是最糟糕的选择 实际上,使用cookie存储用户会话id,然后将会话数据保存在数据库、平面文件或memcached中是解决此问题的常见方法。这将有助于为此设置一个可重用的机制,如排序注册表,您可以随

我的桌子是这样的:

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

以下是我在想的选择

  • 用户
    表中生成
    排序字段
    排序顺序
    字段
  • 创建一个新表,该表包含其
    用户标识
    以及
    排序字段
    ,以及
    排序顺序
    字段
  • 或者饼干,但我认为这是最糟糕的选择

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

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


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

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

  • 如果您必须在浏览器、PC之间共享此设置,则很好
    如果用户在浏览器中删除cookie,则为。但它是不灵活的——如果 您将需要添加另一个表,您还将添加两个附加表 田地
  • 在如何在计算机、浏览器等之间共享方面与1相同,但它更灵活。您可以轻松添加具有表名的列
  • 如果此设置不太重要,在某些情况下,您可能会允许松动设置。此解决方案最简单,但可能不适用于您

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

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

    ..2)关系数据库的构建就是为了这样使用。我不确定性能,但我知道使用关系数据库的功能可以使您的数据库更易于导航和理解/操作。虽然您可能需要一些更复杂的调用(即joins和诸如此类的调用),但我相信折衷是值得的


    3)饼干是一种非常有效的解决方案。它们可以在临时情况下使用,但如果您试图保存信息以备以后使用,Cookie很容易被删除,甚至无法启用,此时您的站点可能会受到严重影响。

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


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

    我认为我们不清楚您想要什么,但我认为您需要这样的内容:

    步骤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,则可以将其放入会话变量中


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

    保存多长时间?您是将其保存到用户的个人资料中,还是只保存到他们在网站上的时间?@DouglasA.Crosby我正在考虑将其保存到他们的个人资料中,这就是为什么我认为Cookies不是解决问题的方法。我正在试图找出cookies用于跟踪会话的“标准”方式。阅读有关饼干的知识。您可以使用它,也可以在URL中使用哈希。在任何情况下,都需要跟踪用户会话。如果你有一个类似的登录,你可能已经有了,只是没有意识到而已。我很抱歉我的问题不清楚(自学PHP/SQL和我的术语很糟糕)。我希望能够存储用户的排序选项,当他们离开页面并返回时,页面仍将按照他们离开页面的方式进行排序。只是想找出最好(标准)的方法。如果我创建第二个存储排序选项的表,我将如何使用subselect查询进行此操作?@Draven,这就是为什么这不是一个好的解决方案。就像我说的,使用Zend会话或编写自己的会话。如果您编写的不是最基本的演示,那么您可能会存储多个用户首选项值。您需要一种存储和检索这些值的通用方法。