按 2 列的字段值排序 - mysql - delphi - dbgrid
Sort by field values from 2 columns - mysql - delphi - dbgrid
我有两列名为 priority
和 state
:
- 列
priority
将仅包含字段值:urgent
和 normal
。
- 列
state
将仅包含字段值:wait
、executed
和 done
。
我正在尝试使用我的 dataset CommandText
属性 对这些进行排序,因此连接到数据集的 dbgrid
会按照我在那里设置的排序顺序显示数据。
排序顺序应该是这样的:
priority
列中包含 urgent
的行应开始 DBGrid 列表。
- 然后列表应该继续
priority
列中标记为 normal
的列表,
- 后面是
state
列中标记为 wait
的那些,
- 后面是
state
列中标记为 executed
的那些,
- 最后,列表以
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()
,因此请按正确顺序排列。
- 这将通过相同的三个键对 "urgent" 进行排序。这似乎与您的问题一致。
我有两列名为 priority
和 state
:
- 列
priority
将仅包含字段值:urgent
和normal
。 - 列
state
将仅包含字段值:wait
、executed
和done
。
我正在尝试使用我的 dataset CommandText
属性 对这些进行排序,因此连接到数据集的 dbgrid
会按照我在那里设置的排序顺序显示数据。
排序顺序应该是这样的:
priority
列中包含urgent
的行应开始 DBGrid 列表。- 然后列表应该继续
priority
列中标记为normal
的列表,
- 后面是
state
列中标记为wait
的那些, - 后面是
state
列中标记为executed
的那些, - 最后,列表以
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()
,因此请按正确顺序排列。 - 这将通过相同的三个键对 "urgent" 进行排序。这似乎与您的问题一致。