【问题标题】:Need help getting oracle "SORT BY" to work how I want it to需要帮助让 oracle "SORT BY" 以我想要的方式工作
【发布时间】:2013-06-28 20:29:44
【问题描述】:

我有一个充满数据的表,它有五列:id(varchar2)、description(varchar2)、diameter(number)、crown(number) 和 lockout(single char)

该表内置在使用 ASP-classic 制作的 webapp 中。该表在顶部有一行,其标题包含每列的名称。当用户单击标题时,表格会重建,按他们单击的列升序或降序排序,具体取决于先前的方向(如网站上的典型排序按钮)。

我想要发生的事情是:当用户点击除id之外的任何行时,按他们点击的行排序按id ,因为例如可以有数百条具有相同描述值的记录。

这是我现在确定如何排序的代码的 sn-p。

if Len(strSort) > 0 then
    sqlQry = sqlQry + " ORDER BY " & strSort
    if intSortDir <> "1" then
        sqlQry = sqlQry + " DESC"
    end if
end if

strSort是从asp查询url中拉出来的,点击时添加到url中。 intSortDir 基本上初始化为 0 并在用户单击标题时切换。

总而言之,我的问题是,我怎样才能一次按两列排序,单击的那一列是主要排序。

我试过了:

if Len(strSort) > 0 then
    if strSort = "id" then 
        sqlQry = sqlQry + " ORDER BY " & strSort
        if intSortDir <> "1" then
            sqlQry = sqlQry + " DESC"
        end if
    else
        sqlQry = sqlQry + " ORDER BY " & strSort & ",id"
        if intSortDir <> "1" then
            sqlQry = sqlQry + " DESC"
        end if
    end if
end if

它按照我想要的方式排序,但它不允许我切换排序方向。

【问题讨论】:

  • 尝试 ORDER BY
  • 这看起来你正在做的构建查询将容易受到 sql 注入攻击。啧啧
  • @JoelCoehoorn 我昨天遇到问题时也听说了。我怎样才能避免这种情况?并不是说我很担心,因为它只会在 Intranet 上运行并且不能公开访问,但仍然
  • 参数化查询。
  • 好的,很高兴知道。我怎样才能使查询可以在不参数化的情况下可变?这对我来说是一次很棒的学习经历。我是否会做一个大量的 switch 语句,以便如果 strSort 是这样,做这个查询,如果是这样,做那个查询?这似乎是一团糟,因为可能有成千上万的潜在查询

标签: html sql oracle asp-classic


【解决方案1】:
if Len(strSort) > 0 then
    sqlQry = sqlQry + " ORDER BY " & strSort 
    if intSortDir <> "1" then
        sqlQry = sqlQry + " DESC"
    end if

    if strSort <> "id" then 
        sqlQry = sqlQry + ", id"
        if intSortDir <> "1" then
            sqlQry = sqlQry + " DESC"
        end if
    end if
end if

另外,使用 javascript 在浏览器中对这些行进行排序可能会更好。如果您可以使用 jQuery,那么有一个 tablesorter() 插件可以轻松完成。

【讨论】:

  • 这与我发布的第二个 sn-p 代码的作用相同。它按主行排序,然后按id 排序,但如果我再次单击主行,它会翻转id 的顺序。我需要它再次按主行重新排序。
  • 好吧,这解决了。非常感谢!我也会研究 jQuery,但你的解决方案修复了它
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 2015-02-11
  • 2011-02-25
  • 2014-10-10
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多