mysql - 按 2 列的字段值排序 - mysql - delphi - dbgrid

标签 mysql sql delphi sql-order-by dbgrid

我有两列名为 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

最佳答案

你们很亲近。您只需要 order by 中的第二个键:

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

注意事项:

  • 我从第一个键中删除了 DESC。您正在使用 field(),因此请按正确的顺序排列。
  • 这将通过相同的三个键来订购“紧急”。这似乎与您的问题一致。

关于mysql - 按 2 列的字段值排序 - mysql - delphi - dbgrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105888/

相关文章:

mysql - SQL 查询以获取同一表中计数大于 1 的列

delphi - 加载/保存 .ini 文件

python - sqlalchemy中执行之前如何知道sql查询结果的类型

mysql - 从 MySQL 中的两个表中检索重复项

c# - 如何协调 LINQ 中的第一条和最后一条记录

mysql - Sqlite3 创建表时出错

delphi - 如何在Delphi中强制分层源代码结构

php - 使用面向对象的 php 在 mysqli 函数中更新查询

mysql - 无法从数据库中删除用户

php - 将mysql返回的值存储在php变量中