【问题标题】:MySql : Order differently within the same columnMySql:同一列中的顺序不同
【发布时间】:2012-02-23 08:44:37
【问题描述】:

我有一个表 Foo 有一个列 'FooId'

选择设置Foo attribute 的用户,将其设置为positive integer,而对于其他用户,此列的值为-1

现在,我希望按FooId 列对表格的内容进行排序,这样FooId 为正的结果将排在具有默认值(即-1)的结果之前。 所以,我的查询类似于select * from Foo order by FooId desc

现在我想随机化我的结果,这样positive 'FooId' 的结果仍然在FooId = -1 的结果之前,但结果是随机排序的rand() 的东西也应该没问题,因为我现在不关注性能。

我有哪些选择来制定查询?

【问题讨论】:

    标签: mysql random sql-order-by


    【解决方案1】:
    SELECT * FROM Foo
    ORDER BY IF(FooId>0,RAND(),-0.1) DESC;
    

    【讨论】:

      【解决方案2】:

      您可以执行SELECT ... WHERE FooID >=0 ORDER BY RAND(),然后将 UNION 与另一个选择一起使用,如下所示:

      SELECT * 
      FROM Foo
      WHERE FooID >= 0 
      ORDER BY RAND() 
      UNION ALL 
      SELECT * 
      FROM Foo
      WHERE FooID == -1;
      

      您可以使用UNION ALL 连接任何表,只要它们具有相同的列。

      【讨论】:

        【解决方案3】:

        试试这个查询 -

        SELECT * FROM Foo ORDER BY if(FooId >= 0, 0, 1), RAND();
        

        【讨论】:

          【解决方案4】:

          试试下面:

          SELECT * FROM Foo
           ORDER BY IF(FooId > 0,0,1);
          

          【讨论】:

          • 我认为它不会随机化。会吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-02
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多