【问题标题】:Maintain SQL sort state throughout next query?在整个下一个查询中保持 SQL 排序状态?
【发布时间】:2010-11-15 13:16:38
【问题描述】:

我看到了this post,但不明白这是否是同一个问题。

我的数据库可以按每一列排序。数据库排序后,如何在下一次查询后保持该顺序?

例如:
按年龄排序数据库:
sprintf(sql, "select * from Customer_Table ORDER BY age_ID LIMIT 100 OFFSET %s;", offset);

然后用户查看接下来的 100 个客户

sprintf(sql, "select * from Customer_Table LIMIT 100 OFFSET %s;", offset); //下一个偏移量

返回的数据不再按年龄排序。如何在下一个查询中保留最后一个排序?

我是否必须传入一个变量来维护状态,或者数据库是否有一些函数可以调用它的最后一个状态?

【问题讨论】:

    标签: sql c


    【解决方案1】:

    除了将记录选择到临时表中,然后从该表中进行选择之外,您还必须在每个查询中指定 ORDER BY。服务器不会保留与先前查询有关的任何状态。为什么在后续查询中重新指定 ORDER BY 子句会出现问题?

    您是使用临时表还是重新指定整个查询取决于您的应用程序的结构。

    【讨论】:

    • 所以临时表总是会被维护该顺序的最后一个查询填充。下一个查询将在该临时表上,并且该表将被该查询替换,等等。创建该表的方法是什么?这不是问题,但从客户期望的角度来看,必须再次排序将是“愚蠢的”。额外的点击次数。用户想要质量,但质量必须快,否则他们会离开您的网站。
    • 临时表不保证订单。在查询临时表中的片段时,您需要指定 ORDER BY。 @Tommy:临时表的创建因 RDBMS 而异,因此会因您的平台而异。
    • @Tommy:您写道“必须再次排序会很愚蠢”。但这就是 RDBMS 所做的。您在程序中需要做的就是记住用户请求的最后一个排序顺序,然后为下一个查询构建适当的 SQL。这不需要更多的用户输入。作为程序员,维护状态由您决定。你提到了“网站”,所以我猜这是一个网站。有很多方法可以在 Web 应用程序中维护状态 - 会话变量、隐藏表单字段等。
    【解决方案2】:

    您必须在每个请求中指定 ORDER BY 子句。

    您的数据库系统对此进行优化的方式与您的客户端代码无关。

    【讨论】:

      【解决方案3】:

      数据库引擎生成的结果集一旦完成就会被遗忘。每次查询数据库时,都必须提供排序顺序。

      【讨论】:

        【解决方案4】:

        SQL 数据库不保证任何排序,您必须在每次选择调用时指定它。

        【讨论】:

        • 是的,我看到了,看看是否有人有创造性的方法来维护最后一种。
        猜你喜欢
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多