Mysql – 如何通过交替(1,2,3,1,2,3,1,2,3)行来订购结果,是否可能?

我想通过客户端1,2,3,然后再次客户端1,2,3等来订购我的结果.

有没有办法在不使用for循环或进行三次单独查询的情况下执行此操作?不仅如此,我正在使用分页数据,因此它需要返回x结果,但始终如一.

有任何想法吗?可能是GROUP BY?

client_id  project_id  project_name  
---------- ----------  ------------
 1         42          project abc
 2         49          project xyz
 3         41          project 123
 1         22          project apple
 2         29          project orange
 3         21          project banana

解决方法:

采用:

SELECT x.client_id, 
       x.project_id,
       x.project_name
  FROM (SELECT t.client_id,
               t.project_id,
               t.project_name,
               CASE
                 WHEN @client_id != t.client_id THEN @rownum := 0
                 WHEN @client_id = t.client_id THEN @rownum := @rownum + 1
                 ELSE @rownum 
               END AS rank,
               @client_id := t.client_id
          FROM TABLE t,
               (SELECT @rownum := 0, @client_id
      ORDER BY t.client_id) r) x
ORDER BY x.rank, x.client_id

MySQL没有任何排名功能,但幸运的是你可以使用变量.当client_id与先前的client_id不匹配时,关键是重置@rownum值 – 子查询中的ORDER BY是为了确保客户端有序.

上一篇:数据库-什么是排名系统的良好设计


下一篇:PHP MYSQL组排名查询