跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 大量数据, Mysql 多规则,优先排序的问题
未分類
25 5 月 2020

大量数据, Mysql 多规则,优先排序的问题

大量数据, Mysql 多规则,优先排序的问题

資深大佬 : zhongjun96 4

排序规则

  1. age=24 的数据优先展示
  2. age=24 的数据 Id 正序显示
  3. 其它数据 Id 倒序显示

源数据: 大量数据, Mysql 多规则,优先排序的问题

目前我的 Sql:

SELECT * FROM test ORDER BY IF (age=24,0,1),id DESC; 

查询效果: 大量数据, Mysql 多规则,优先排序的问题

目前只能实现规则 1,3 。 请问如何实现全部规则。

目前该表数据 117 万条: 大量数据, Mysql 多规则,优先排序的问题

大佬有話說 (12)

  • 資深大佬 : opengps

    你可以尝试用一个中间列过渡下,(盲猜,性能不确定)
    把 24 的填充 1,非 24 的填充 2,然后的排序规则就是~
    第一排序中间列正序,第二排序 id 列倒序

  • 資深大佬 : CRVV

    ORDER BY IF (age=24,-id,1),id DESC

  • 資深大佬 : CRVV

    不过,有 100 多万行的话,这样也许会比较慢。
    查一个 WHERE age = 24 再另查一个 age <> 24 可能快一些

  • 資深大佬 : luckyrayyy

    union?一个查询 24 一个查询非 24 然后一起展示

  • 主 資深大佬 : zhongjun96

    @CRVV 试了一下,没效果,24 的 id 还是倒序了。
    ![]( https://i.bmp.ovh/imgs/2020/05/84e0aeb2d049e320.png)

  • 資深大佬 : kalok

    (SELECT * from test Where age = 24 Order By id ASC)
    Union All
    (SELECT * from test Where age != 24 Order By id DESC);

  • 主 資深大佬 : zhongjun96

    @kalok 试过了,不知为何,第二个排序会失效
    <a href=”https://sm.ms/image/wqi8nhHFOJoIyNR” target=”_blank”><img src=”https://i.loli.net/2020/05/26/wqi8nhHFOJoIyNR.png” ></a>

  • 資深大佬 : kalok

    我懂了,Union 之后会打乱次序,那只有像做数学题那样,位移了。
    SELECT * from test
    Order By (Case When age = 24 Then -100 + id
    ELSE 1000 – id
    END ) ASC;

  • 資深大佬 : fy1993

    必须要用 sql 实现吗, 可不可以先取出全量 24 的数据到内存中通过程序排序, 然后同样方式取出其他数据也在内存中排序

  • 資深大佬 : daozhihun

    做个临时表拼在一起就可以了

  • 資深大佬 : CRVV

    @zhongjun96
    ORDER BY IF (age=24, id, 2147483647) ASC, id DESC

    如果是别的数据库可以用 null 然后 asc nulls last,MySQL 不支持这么写,只能放一个大数字了

  • 資深大佬 : akira

    新加一列,sid , 如果 age=24 则 sid = 99999999 – id,否则 sid = id 。
    然后按 sid 逆序排

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具