【问题标题】:Sort by field values from 2 columns - mysql - delphi - dbgrid按 2 列中的字段值排序 - mysql - delphi - dbgrid
【发布时间】:2016-10-18 10:33:35
【问题描述】:

我有两列名为prioritystate

  • priority 列将仅包含字段值:urgentnormal
  • state 列将仅包含字段值:waitexecuteddone

我正在尝试使用我的 dataset CommandText 属性对这些数据进行排序,因此连接到数据集的 dbgrid 按我在此处设置的排序顺序显示数据。

排序顺序应该是这样的:

    1. priority 列中包含 urgent 的行应启动 DBGrid 列表。
    2. 然后该列表应继续在priority 列中标记为normal 的列表,
    1. 紧随其后的是state 列中标记为wait 的那些,
    2. 后面是state 列中标记为executed 的那些,
    3. 最后,列表以state 列中标记为done 的列表结束。

我不知道如何为此编写 SQL 语句,所以我可以在数据集的 CommantText 属性中使用它。

我目前正在使用这个:

SELECT *
  FROM table_name
  ORDER BY FIELD(column_name, "normal", "urgent") DESC

这适用于第一列priority,但不考虑第二列state

【问题讨论】:

    标签: mysql sql delphi sql-order-by dbgrid


    【解决方案1】:

    你很亲密。您只需要order by 中的第二个密钥:

    SELECT *
    FROM table_name
    ORDER BY FIELD(priority, 'urgent', 'normal'),
             FIELD(state, 'wait', 'executed', 'done')
    

    注意事项:

    • 我从第一个键中删除了DESC。您使用的是field(),所以请按正确的顺序排列。
    • 这将通过相同的三个键对“紧急”进行排序。这似乎与您的问题一致。

    【讨论】:

    • 认为这会起作用,但由于我对此很陌生,所以我在 2nd FIELD 前面添加了另一个 ORDER BY,猜这是小事,哈哈。感谢您的回答和关于 DESC 的额外说明,这让事情变得更清楚了。
    • 我还有一个名为 ID 的表设置为自动递增、主要和唯一。这会以任何方式干扰这种类型吗?我刚刚尝试过,它确实有效,但它们在我的 dbgrid 中颠倒了(紧急到底部,顶部正常)
    • 您确定,您的查询中还没有DESC
    • @RenéHoffmann 是的,我确定,只是仔细检查过 - 这也发生在旧的 1 列排序中,这就是我添加 DESC 的原因,这似乎可以解决问题 - 虽然不完全.
    • s16.postimg.org/g9pahw5p1/Capture.png - 我认为这两列是问题所在。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多