【发布时间】:2016-10-18 16:55:41
【问题描述】:
我在我正在使用的DataSet 的CommandText 属性中使用以下内容:
SELECT *
FROM table_name
ORDER BY FIELD(priority, 'urgent', 'normal'),
FIELD(state, 'wait', 'executed', 'done')
它应该对我在连接到此DataSet 的DBGrid 中显示的数据进行排序,如下所示:
-
priority列中包含urgent的行应启动 DBGrid 列表。 - 那么列表应该继续在
priority列中标记为normal的列表,
-
- 紧随其后的是
state列中标记为wait的那些, - 后面是
state列中标记为executed的那些, - 最后,列表以
state列中标记为done的列表结束。
- 紧随其后的是
但它没有,实际上它确实有点,但它实际上是倒退的。 这是我制作的快速视频,向您展示正在发生的事情,也许您可以通过这种方式获得更清晰的视图:
我猜这是因为我正在使用的 ID column 或 Date column 但如果是这样,我不知道如何以及为什么。
这就是这两列的外观/设置方式:
- ID 列设置为 Primary 和 Unique 和 Auto_Increment - 就是这样,没有索引或任何其他选项 如果不是这 2 列的问题,那么可能是 DBGrid?
我正在使用 RAD Studio 10 Seattle、dbExpress 组件(TSimpleDataSet 等)和 MySQL db
关于如何解决这个问题的任何想法?谢谢!
【问题讨论】:
-
我之前在MySql中没用过Field(,但是好像你用错了。Field(函数的第一个参数必须是整数。你不显示有没有字段称为优先级或状态,但我猜你这样做,否则sql会失败。这与Delphi无关。
-
@nolaspeaker 我有名为优先级和状态的列,这些列的单元格值如上所述(紧急、正常、等待等)。名为 priority 和 state 的列确实设置为 VarChar,列 ID 设置为 INT - 你说这可能是问题所在,我正在使用的字段中的第一列应该是 INT(在这种情况下,优先级? )
-
建议你阅读一下Field函数的使用方法。
-
您的查询在 mysql management studio 中运行正常吗?插入新记录后是否刷新数据集?
-
顺便说一句,我会将优先级和状态的类型更改为整数(根据排序要求),并为它们创建索引(单索引和双索引)。
标签: mysql sql delphi sql-order-by dbgrid