Mysql-我怎么了结果通过交流(1,2,3, 1, 2, 3, 1, 2, 3,) 行,这可能吗?

StackOverflow https://stackoverflow.com/questions/1959414

  •  21-09-2019
  •  | 
  •  

我想到了我的成绩通过客户的1,2,3,然后再次客户的1,2,3,等等。

有没有办法做到这一点没有使用一个循环或三个单独的查询?不仅如此,但我的工作与分页的数据,因此需要返回x的结果,但是始终如一。

任何想法?小组通过也许?

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没有任何排名的功能,但幸运的是,你可以使用变量。关键是重置@rownum值时CLIENT_ID没有以前的CLIENT_ID匹配 - 的ORDER BY的子查询,确保客户都是为了

其他提示

为什么不 ORDER BY id?

GROUP BY是不会有帮助。这是否是可能的是要依靠大量的数据。基本上你将需要一个令人费解的ORDER BY,基于其他值砍死的东西在一起。

例如,使用你给数据。例如,可以使用:

ORDER BY FLOOR(project_id / 10), client_id

这是不太可能是有用的在你的真实数据,但它给你需要采取一个单独的领域,使该数据的部分子集相当于排序的目的(在这种情况下的想法,一切都以相同的10S值)和具有上CLIENT_ID一个次要排序。

虽然这取决于最终的公式很多,这样的事情应该是一个相对稳定的排序,因此添加分页,诸如经由

LIMIT 10, 10

应返回一致的结果。

当然,这样做意味着你不必指标得到任何好处,所以如果你有很多行,它最终会被比做与循环/单独的查询慢的东西。

除非我读的问题错这是你想要的吗?

SELECT *
FROM table
WHERE client_id in (1, 2, 3)
ORDER by id, client_id

听起来象是要在客户端完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top