V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bobo2
V2EX  ›  数据库

我只是一个小小的前端,怎奈 sql 竟找上了我

  •  
  •   bobo2 · 2022-03-14 11:43:10 +08:00 · 2822 次点击
    这是一个创建于 766 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一个 sql

    查 cc 表, 根据 time 排序后,获取 aid = xxx 之后的数据

    比如排序后的总数据是这样子 [ {aid: 'a'}, {aid: 'b'}, {aid: 'c'}, ... ]

    我要 aid = 'b' 之后的数据 [{aid: 'c'}, ...]

    hay313955795
        1
    hay313955795  
       2022-03-14 12:30:32 +08:00
    要个 sql 语句???
    sadfQED2
        2
    sadfQED2  
       2022-03-14 12:50:02 +08:00 via Android
    你直接发一条数据 demo 上来,我给你写条 sql
    bobo2
        3
    bobo2  
    OP
       2022-03-14 12:51:08 +08:00
    @hay313955795 是滴是滴
    bobo2
        4
    bobo2  
    OP
       2022-03-14 12:54:21 +08:00
    [
    {aid: '47BUB4lwDXS', time: 1647233521466, name: 'ppp'},
    {aid: '47BUB4lwDCS', time: 1647233521467, name: 'qqq'},
    {aid: '47BUB4lwCAS', time: 1647233521466, name: 'sss'},
    {aid: '47BUB4lQDXS', time: 1647233521462, name: 'ggg'},
    ]
    SELECT * from idx 这样,根据 time 倒序后,获取 aid 为 47BUB4lwCAS 之后的数据
    bobo2
        5
    bobo2  
    OP
       2022-03-14 12:55:08 +08:00
    @sadfQED2
    [
    {aid: '47BUB4lwDXS', time: 1647233521466, name: 'ppp'},
    {aid: '47BUB4lwDCS', time: 1647233521467, name: 'qqq'},
    {aid: '47BUB4lwCAS', time: 1647233521466, name: 'sss'},
    {aid: '47BUB4lQDXS', time: 1647233521462, name: 'ggg'},
    ]
    SELECT * from idx 这样,根据 time 倒序后,获取 aid 为 47BUB4lwCAS 之后的数据
    liprais
        6
    liprais  
       2022-03-14 12:57:27 +08:00
    rank 之后取比那条的 rank 大的完事
    bobo2
        7
    bobo2  
    OP
       2022-03-14 13:04:28 +08:00
    或者说,除了 limit ,还有其他方式在查询时候跳过指定条数据吗,比如在排序后跳过 3000 条,从第 3001 条开始查询,存在这种关键字吗
    sqfphoenix
        8
    sqfphoenix  
       2022-03-14 13:19:19 +08:00
    select * from idx where time > (select time from idx where aid = 'xxx')
    瞎写的不知道对不对大概就这个意思吧
    bobo2
        9
    bobo2  
    OP
       2022-03-14 13:26:11 +08:00
    @sqfphoenix time 可能存在相同值 >_<,怪我没说清楚
    sqfphoenix
        10
    sqfphoenix  
       2022-03-14 13:34:14 +08:00   ❤️ 1
    @bobo2 不太明白,是指多个 aid 有同一个 time 吗,那对于同一个 time 来说传入的 aid 不同得到的结果也不同,这个业务逻辑是有问题的吧
    如果说只要排除自己只要改成 select * from idx where time >= (select time from idx where aid = 'xxx') and aid <> 'xxx'就可以了吧
    bobo2
        11
    bobo2  
    OP
       2022-03-14 14:44:49 +08:00
    @sqfphoenix 对的,我改用 rownum 做了
    spLite
        12
    spLite  
       2022-03-14 16:24:06 +08:00
    select * from (select * from idx order by time)t
    where t.aid>'47BUB4lwCAS ';
    moremoney
        13
    moremoney  
       2022-03-14 16:45:39 +08:00
    1.先找到 aid="47BUB4lwCAS" 这条数据的时间
    2.然后用 找到的时间作为条件查询,并倒序排序
    select * from idx where time<= 1647233521466 order by time desc
    Codelike
        14
    Codelike  
       2022-03-14 17:10:57 +08:00
    @sqfphoenix 不等于也不对。还是 select * from idx where time >= (select time from idx where aid = 'xxx') ,然后在逻辑里面再去掉 aid='xxx'和它之前的数据
    Abbeyok
        15
    Abbeyok  
       2022-03-14 17:25:04 +08:00   ❤️ 1
    哈哈,原来真的是前端对后端表示无力,后端对前端表示无力
    MrTLJH
        16
    MrTLJH  
       2022-03-14 18:28:04 +08:00
    @Codelike
    @moremoney
    就算 time 排序后,也有可能'xxx'前面有数据的 time 与'xxx'的 time 相同,也就是'xxx'这条数在相同 time 的数据里处于中间位置
    seakingii
        17
    seakingii  
       2022-03-14 21:24:07 +08:00
    @Abbeyok 前两天做核酸检查,排队的时候,前面几个人一个公司的,在讨论说:后端转前端很轻松,前端转后端很难....因为后端的工作比前端难
    cz5424
        18
    cz5424  
       2022-03-14 21:52:11 +08:00
    @seakingii 前端知识很容易过时,后端转前端可以直接学新知识
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5401 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:20 · PVG 16:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.