首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以按主键排序查询?

是否可以按主键排序查询?
EN

Stack Overflow用户
提问于 2014-05-07 11:23:18
回答 1查看 100关注 0票数 3

我有一个实体定义,其中包含一个类型为UTCTime的字段。

代码语言:javascript
运行
AI代码解释
复制
Foo
    time UTCTime
    ...

我想选择按时间顺序排列的各种实体。如果两个实体有相同的时间,我不在乎哪个是第一位的,我只是希望每次的顺序都是一样的。实体键是唯一的,按键排序似乎是完美的选择。

是否可以执行像selectList这样的查询并按主键对匹配的行进行排序?另一个选择

  • 是否可以在实体中包含主键?
  • 或者,还有其他方法来确定行的顺序吗?

当然,我总是可以按时间请求订单,然后自己按键排序返回的列表。但这排除了使用SelectOpOffsetByLimitTo,因为我无法事先知道有多少个具有相同时间的实体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 12:19:01

我不确定SelectOpt是否只适用于实体值,所以我在一小段代码中检查了它。假设一个实体如下所示:

代码语言:javascript
运行
AI代码解释
复制
EntityA
    key Text
    time UTCTime
    deriving Show

您只需列出您感兴趣的SelectOpt,并获得所需的输出。

示例代码如下所示:

代码语言:javascript
运行
AI代码解释
复制
main :: IO ()
main = runSqlite ":memory:" $ do
    runMigration migrateAll

    currentTime <- liftIO getCurrentTime

    -- insert some data
    _ <- insert $ EntityA "first" currentTime
    _ <- insert $ EntityA "second" currentTime
    _ <- insert $ EntityA "third" currentTime
    _ <- insert $ EntityA "fourth" currentTime

    currentTime <- liftIO getCurrentTime

    -- insert more data
    _ <- insert $ EntityA "fifth" currentTime
    _ <- insert $ EntityA "sixth" currentTime
    _ <- insert $ EntityA "seventh" currentTime
    _ <- insert $ EntityA "eighth" currentTime

    currentTime <- liftIO getCurrentTime

    -- insert more data
    _ <- insert $ EntityA "this one will be first" currentTime

    sorted <- selectList [] [Desc EntityATime, Asc EntityAId]
    mapM_ (liftIO . print) sorted

产出如下:

代码语言:javascript
运行
AI代码解释
复制
Migrating: CREATE TABLE "entity_a"("id" INTEGER PRIMARY KEY,"key" VARCHAR NOT NULL,"time" TIMESTAMP NOT NULL)
Entity {entityKey = Key {unKey = PersistInt64 9}, entityVal = EntityA {entityAKey = "this one will be first", entityATime = 2014-05-07 20:15:35.627561 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 5}, entityVal = EntityA {entityAKey = "fifth", entityATime = 2014-05-07 20:15:35.627026 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 6}, entityVal = EntityA {entityAKey = "sixth", entityATime = 2014-05-07 20:15:35.627026 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 7}, entityVal = EntityA {entityAKey = "seventh", entityATime = 2014-05-07 20:15:35.627026 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 8}, entityVal = EntityA {entityAKey = "eighth", entityATime = 2014-05-07 20:15:35.627026 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 1}, entityVal = EntityA {entityAKey = "first", entityATime = 2014-05-07 20:15:35.626622 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 2}, entityVal = EntityA {entityAKey = "second", entityATime = 2014-05-07 20:15:35.626622 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 3}, entityVal = EntityA {entityAKey = "third", entityATime = 2014-05-07 20:15:35.626622 UTC}}
Entity {entityKey = Key {unKey = PersistInt64 4}, entityVal = EntityA {entityAKey = "fourth", entityATime = 2014-05-07 20:15:35.626622 UTC}}

如果您感兴趣,我可以发布示例项目(它在fpcomplete.com上),但我想这很好地说明了这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23526524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档