【问题标题】:ORDER BY part stringORDER BY 部分字符串
【发布时间】:2014-04-16 10:44:23
【问题描述】:

我有一个列名unique,我试图打印随机排序的结果,首先是所有以lead_ 开头的行,然后是所有其余的行。

例如,如果我有这样的行:

abc
lead_ass
dsff
dds
lead_fdg
fds
lead_hhf

我需要先打印随机排序的lead_ass,lead_fdg,lead_nhf,然后再打印其余的,同样随机排序。

【问题讨论】:

    标签: php mysql sql sql-order-by


    【解决方案1】:

    你可以这样做:

    order by (col like 'lead_%') desc,
             rand()
    

    表达式 (col like 'lead_%') 返回 true(视为 1)或 false(视为 0),因此 desc 将匹配项放在首位。 rand() 只是因为你说你想要随机订购的东西。这将随机排列两组。

    【讨论】:

    • 你确实比我快 2 秒 :D +1
    • 谢谢!但是有办法让lead_ 也随机排序吗?
    • @OfirH 。 . .这将对两组随机排序,以'lead_' 开头的组和不以'lead_' 开头的组。
    • @GordonLinoff 正如您在回答中所说,(col like 'lead_%') 将返回 1 如果为真,然后我使用 DESC 首先打印它们。 DESC如果数字相等是随机的?
    • @OfirH 。 . .不,rand() 将每组中的结果随机化。它是第二个排序键。
    【解决方案2】:

    你可以使用CASE和LEFT函数

    ORDER BY CASE 
             WHEN LEFT(col,5) ='lead_' 
             THEN 1 ELSE 2
             END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2013-10-15
      • 2014-01-26
      • 2023-03-17
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多